Python迭代多个文件

时间:2017-02-28 03:11:30

标签: python loops traversal

我有一系列文件采用以下格式:

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')

不是为每个文件执行所有这些操作,而是如何遍历多个文件并在多个文件中重复相同的操作?换句话说,我想迭代所有文件(它们大多数遵循其名称中的数字序列,但序列中存在一些空白)。

感谢您的帮助。

4 个答案:

答案 0 :(得分:1)

您应该使用Python的glob模块:https://docs.python.org/3/library/glob.html

例如:

import glob
for path in glob.iglob(directory + "file_*.xlsx"):
    pd.read_excel(path)
    # ...

答案 1 :(得分:1)

您可以使用os.listdirglob模块列出目录中的所有文件。

使用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 """

或者使用glob模块(这是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 """

答案 2 :(得分:1)

我建议glob

执行glob.glob('file_*')会返回一个列表,您可以迭代并开始工作。

执行glob.iglob('file_*')返回一个生成器对象,它是一个迭代器。

第一个会给你类似的东西:

['file_1991.xlsx','file_1992.xlsx','file_1995.xlsx','file_1996.xlsx']

答案 3 :(得分:0)

如果您知道如何构建文件名,则可以try打开具有'r'属性的文件,以便open(..., 'r')在文件不存在时失败。< / p>

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()