[英]how to import excel files from two folders in python
我最初有一個用於合並一個文件夾中文件的代碼。 但是,這項工作擴展到可以合並兩個文件夾中的文件。 我編輯了代碼,以首先在兩個文件夾中添加文件列表。 該部分正在工作,但在實際的for循環部分中將不起作用。 我認為這可能是由於當前的工作目錄,但我不知道如何更改該部分。 到目前為止,這是我的代碼:
files1 = os.listdir(folder1) #i just replaced the path with folder1
files2 = os.listdir(folder2) #i just replaced the path with folder2
files = files1 + files2
df = pd.DataFrame() #creating an empty dataframe
for f in files: #for loop in extracting and merging the files
data = pd.read_excel(f)
df = df.append(data, sort=False).reset_index(drop=True)
我建議您稍微修改一下代碼設計。 列出所有文件夾並對其進行迭代,然后在循環中加載文件。 您可以根據需要在任意數量的文件夾中使用此代碼
import os
from pathlib import Path
def merge_files_in_folder(folder):
df = pd.DataFrame()
for excel_file in os.listdir(folder):
data = pd.read_excel(folder / excel_file)
df = df.append(data, sort=False).reset_index(drop=True)
return df
folders = ['folder1', 'folder2']
df = pd.DataFrame()
for folder in folders:
data = merge_files_in_folder(Path(folder))
df = df.append(data, sort=False).reset_index(drop=True)
我們可以通過在文件名中添加文件夾名稱來修復此代碼:
import os
import pandas as pd
folder1 = 'folder1/'
folder2 = 'folder2/'
files1 = ["{}{}".format(folder1,file) for file in os.listdir(folder1)]
files2 = ["{}{}".format(folder2,file) for file in os.listdir(folder2)]
files = files1 + files2
print(files)
df = pd.DataFrame() #creating an empty dataframe
for f in files: #for loop in extracting and merging the files
data = pd.read_excel(f)
df = df.append(data, sort=False).reset_index(drop=True)
並將其移至輔助功能,如Alex所建議的那樣,以使代碼更好。
編輯:具有輔助功能的代碼:
import os
import pandas as pd
def listdir_fullpath(d):
return [os.path.join(d, f) for f in os.listdir(d)]
folder1 = 'folder1/'
folder2 = 'folder2/'
files1 = listdir_fullpath(folder1)
files2 = listdir_fullpath(folder2)
files = files1 + files2
print(files)
df = pd.DataFrame() #creating an empty dataframe
for f in files: #for loop in extracting and merging the files
data = pd.read_excel(f)
df = df.append(data, sort=False).reset_index(drop=True)
您說對了:“ os.listdir”僅列出定義的文件夾中文件的文件名( Python 3 Documentation )。
由於os.listdir返回一個列表,因此您可以使用一個輔助函數( 例如 )在每個列表項的路徑之前添加路徑。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.