循环遍历不同文件夹中的文件
Loop over files in different folders
如何遍历 2 个文件夹?在 Apple 及其所有子文件夹中,我想查找 Excel 个包含“green”的文件。在 Banana 中,我想查找包含“黄色”的文件。我明确需要指定文件夹路径,不能只遍历整个 C 盘。
import os
folders = ['C:/Desktop/apple', 'C:/Downloads/banana']
for x in in range(len(folders)):
for root, dirs, files in os.walk(folders[i]):
for file in files:
if file.endswith(".xlsx") and "banana" in folders[i] and "yellow" in file:
df = pd.read_excel(os.path.join(root, file))
df['date'] = pd.to_datetime(df.date)
...
if file.endswith(".xlsx") and "apple" in folders[i] and "green" in file:
df = pd.read_excel(os.path.join(root, file))
df['date'] = pd.to_datetime(df.date)
...
由于所有 excel 文件看起来都一样,我上面的代码很麻烦,因为我正在复制代码来读取数据帧并清理 df。
您可以创建一个字典,其中键是文件夹,值是要搜索的内容。伪代码:
import os
to_search = { # <--- the dictionary
"C:/Desktop/apple": "green",
"C:/Desktop/banana": "yellow",
}
for folder, item in to_search.items(): # <--- use dict.items()
for root, dirs, files in os.walk(folder): # <--- here you use "folder"
for file in files:
if file.endswith(".xlsx") and item in file: # <--- here you use "item"
df = pd.read_excel(os.path.join(root, file))
df["date"] = pd.to_datetime(df.date)
# ...
获取符合您条件的所有文件路径的最简单方法是使用 glob
包:
import glob
for file in glob.glob('C:/Desktop/apple/*green*.xlsx') + glob.glob('C:/Desktop/banana/*yellow*.xlsx'):
print(file)
df = pd.read_excel(os.path.join(root, file))
df['date'] = pd.to_datetime(df.date)
Glob 使用正则表达式模式匹配。如果你想选择只以 green
开头的文件,你可以像这样删除第一个星号 green*
.
对此使用 pathlib
:
from pathlib import Path
for file in [f"C:/Desktop/{f}" for f in list(Path('apple').glob('*green*.csv')) + list(Path('banana').glob('*yellow*.csv'))]:
df = pd.read_excel(os.path.join(root, file))
df['date'] = pd.to_datetime(df.date)
如何遍历 2 个文件夹?在 Apple 及其所有子文件夹中,我想查找 Excel 个包含“green”的文件。在 Banana 中,我想查找包含“黄色”的文件。我明确需要指定文件夹路径,不能只遍历整个 C 盘。
import os
folders = ['C:/Desktop/apple', 'C:/Downloads/banana']
for x in in range(len(folders)):
for root, dirs, files in os.walk(folders[i]):
for file in files:
if file.endswith(".xlsx") and "banana" in folders[i] and "yellow" in file:
df = pd.read_excel(os.path.join(root, file))
df['date'] = pd.to_datetime(df.date)
...
if file.endswith(".xlsx") and "apple" in folders[i] and "green" in file:
df = pd.read_excel(os.path.join(root, file))
df['date'] = pd.to_datetime(df.date)
...
由于所有 excel 文件看起来都一样,我上面的代码很麻烦,因为我正在复制代码来读取数据帧并清理 df。
您可以创建一个字典,其中键是文件夹,值是要搜索的内容。伪代码:
import os
to_search = { # <--- the dictionary
"C:/Desktop/apple": "green",
"C:/Desktop/banana": "yellow",
}
for folder, item in to_search.items(): # <--- use dict.items()
for root, dirs, files in os.walk(folder): # <--- here you use "folder"
for file in files:
if file.endswith(".xlsx") and item in file: # <--- here you use "item"
df = pd.read_excel(os.path.join(root, file))
df["date"] = pd.to_datetime(df.date)
# ...
获取符合您条件的所有文件路径的最简单方法是使用 glob
包:
import glob
for file in glob.glob('C:/Desktop/apple/*green*.xlsx') + glob.glob('C:/Desktop/banana/*yellow*.xlsx'):
print(file)
df = pd.read_excel(os.path.join(root, file))
df['date'] = pd.to_datetime(df.date)
Glob 使用正则表达式模式匹配。如果你想选择只以 green
开头的文件,你可以像这样删除第一个星号 green*
.
对此使用 pathlib
:
from pathlib import Path
for file in [f"C:/Desktop/{f}" for f in list(Path('apple').glob('*green*.csv')) + list(Path('banana').glob('*yellow*.csv'))]:
df = pd.read_excel(os.path.join(root, file))
df['date'] = pd.to_datetime(df.date)