Python 遍历多个文件
Python iterate over multiple files
我有一系列文件,格式如下:
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 or 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 """
或者使用 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 """
我会推荐 glob。
正在执行 glob.glob('file_*')
returns 一个列表,您可以对其进行迭代并完成工作。
做 glob.iglob('file_*')
returns 生成器对象,它是一个迭代器。
第一个会给你这样的东西:
['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()
我有一系列文件,格式如下:
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 or 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 """
或者使用 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 """
我会推荐 glob。
正在执行 glob.glob('file_*')
returns 一个列表,您可以对其进行迭代并完成工作。
做 glob.iglob('file_*')
returns 生成器对象,它是一个迭代器。
第一个会给你这样的东西:
['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()