Python 如何处理文件夹中的所有文件?

Python 如何处理文件夹中的所有文件?,python,pandas,directory-structure,listdir,Python,Pandas,Directory Structure,Listdir,我想在目录中的所有文件上运行我的代码。代码在单个文件上运行良好,但我尝试在多个文件上迭代时会告诉我 FileNotFoundError:[Errno 2]没有这样的文件或目录:“file.xlsx” directory = r"C:/Users/name/Desktop/folder/2018" arrivals_aggregated = pd.DataFrame() print(os.listdir(directory)) for filename in os.listdir(smt_dir

我想在目录中的所有文件上运行我的代码。代码在单个文件上运行良好,但我尝试在多个文件上迭代时会告诉我

FileNotFoundError:[Errno 2]没有这样的文件或目录:“file.xlsx”

directory = r"C:/Users/name/Desktop/folder/2018"
arrivals_aggregated = pd.DataFrame()

print(os.listdir(directory))
for filename in os.listdir(smt_directory):

    print('current file is ' + filename)
    x = pd.ExcelFile(filename)
    symbols = x_symbols(x)
    arv = x.parse(sheet_name='Arrivals', skiprows=5, usecols=[1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23])
    arrivals = x_arrivals(arv, x)

arrivals_aggregated.append(arrivals)
我希望它遍历目录中的所有文件,处理结果并将其聚合为一个大数据帧。相反,它在x=pd.ExcelFile(filename)处停止,表示找不到该文件,即使它在那里,甚至在包含时打印

打印('当前文件为'+文件名)


在没有处理代码的情况下,它在文件夹中的第一个文件上失败。

这是否有效取决于您运行脚本的位置。如果运行脚本的目录中不存在
filename
,则会出现
FileNotFoundError

相反,我会:

x = pd.ExcelFile(os.path.sep.join([directory, filename]))

这将确保您正在将真实的文件位置传递给
pd.ExcelFile

不要使用
.sep
;模块中已经有一个目录连接函数,它按位置接收参数(并且处理一些边缘情况,普通字符串连接不这样做),因此
os.path.sep.join([directory,filename])
简化为
os.path.join(directory,filename)
.sep
已删除和
[]
已删除),谢谢。旁注:在现代Python中,最简单的修复方法是将os.listdir(…):中的文件名替换为os.scandir(…):,并将
文件名(
(在需要完整路径的地方)的用法更改为
entry.path
,或者(在需要名称而不需要路径的地方)更改为
entry.name
scandir
listdir
快,而且您还可以免费(或至少缓存)访问文件上的
stat
相关信息(例如,它实际上是文件还是目录,大小如何等)。谢谢。我希望做出您在这里建议的调整,因为我可能对统计数据感兴趣,并且可能会将其合并到代码中进行一些选择。你到底是怎么建议我更新代码的?对于os.scandir(…)中的条目:然后将文件名替换为entry.path?是的。完全不需要
os.path.join
;合格路径可直接使用,无需额外工作。