Python的遍历多个文件
问题描述:
我有一系列文件,这些文件是按以下格式:Python的遍历多个文件
file_1991.xlsx
file_1992.xlsx
# there are some gaps in the file numbering sequence
file_1995.xlsx
file_1996.xlsx
file_1997.xlsx
因为我想这样做的每个文件:
import pandas as pd
data_1995 = pd.read_excel(open(directory + 'file_1995', 'rb'), sheetname = 'Sheet1')
做了一些工作数据,并将其保存为其他文件:
output_1995 = pd.ExcelWriter('output_1995.xlsx')
data_1995.to_excel(output_1995,'Sheet1')
而不是做所有这些对于每一个文件的,我怎么能经过多个迭代文件并在多个文件中重复相同的操作?换句话说,我想遍历所有的文件(它们主要遵循名称中的数字序列,但序列中存在一些空白)。
感谢您的帮助提前。
答
你应该使用Python的glob
模块:https://docs.python.org/3/library/glob.html
例如:
import glob
for path in glob.iglob(directory + "file_*.xlsx"):
pd.read_excel(path)
# ...
答
您可以使用os.listdir或glob模块列出目录中的所有文件。
使用os.listdir,你可以使用fnmatch来过滤这样的文件(也可以使用正则表达式);
import fnmatch
import os
for file in os.listdir('my_directory'):
if fnmatch.fnmatch(file, '*.xlsx'):
pd.read_excel(open(file, 'rb'), sheetname = 'Sheet1')
""" Do your thing to file """
或者与水珠模块(这是对的fnmatch + listdir同时快捷键),你可以这样做这样的(或用正则表达式):
import glob
for file in glob.glob("/my_directory/*.xlsx"):
pd.read_excel(open(file, 'rb'), sheetname = 'Sheet1')
""" Do your thing to file """
答
我会建议glob。
在做glob.glob('file_*')
返回一个列表,你可以迭代和工作。
做glob.iglob('file_*')
返回一个生成器对象,它是一个迭代器。
第一个会给你这样的:
['file_1991.xlsx','file_1992.xlsx','file_1995.xlsx','file_1996.xlsx']
答
如果你知道你的文件名可以如何构造,你可能try
打开与'r'
属性的文件,这样open(..., 'r')
则会失败该文件不存在。
yearly_data = {}
for year in range(1990,2018):
try:
f = open('file_%4.4d.xlsx'%year, 'r')
except FileNotFoundError:
continue # to the next year
yearly_data[year] = ...
f.close()
谢谢!我可以使用'glob'模块来分配变量名吗?例如,我需要通过分配类似如下内容来读取文件: 'data_1995 = pd.read_excel(open('file_1995.xlsx'),sheetname ='Sheet1')' –
@kfp_ny您为什么要这样做?你需要重新考虑你的程序。 –
@kfp_ny不,你不能,但如果你想保留文件,你可以使用一个字典,并在文件名后面命名键值,如果你想创建一个关系。但我建议不要这样做,并找到一种方法来保持它的动态,如果可以的话,因为每个文件都将被加载到内存中,否则您将遇到同样的问题。 – umutto