首页 > 解决方案 > 如何在 Python 上更改特定文件夹中的多个文件名?

问题描述

所以我一直在使用以下代码来更改特定文件夹中所有文件的文件名。

import os
[os.rename(f,f.replace('20180810','2018_08_10')) for f in os.listdir()]

我遇到的问题是,每当我使用此代码时,我都必须保存它的副本并将其粘贴到文件所在的文件夹中。我希望能够有一个通用代码,我可以在其中指定路径而不必位于该文件夹中。我尝试了以下但由于某种原因它说它找不到文件:

path = 'E:/CSVFILES/20180808/'
[os.rename(f,f.replace('20180810','2018_08_10')) for f in os.listdir(path)]

如果我运行 os.listdir(path),它会运行良好并显示文件夹中的文件,所以我不确定它为什么不起作用。

谢谢!

标签: pythonpathrename

解决方案


os.listdir列出目录中的所有文件,但没有完整路径,os.replace如果文件不在工作目录中,则需要完整路径。相反,使用iglob,它返回完整路径:

>>> from glob import iglob
>>> path = 'E:/CSVFILES/20180808/*'
>>> for f in iglob(path):
>>>     os.rename(f, f.replace('20180810','2018_08_10'))

编辑:因为您的文件位于包含您要替换的相同文本的位置,所以您可以使用basename并且join仅替换文件名中的文本:

>>> from glob import iglob
>>> from os.path import basename, join
>>> path = 'E:/CSVFILES/20180808'
>>> for f in iglob(join(path, "*")):
>>>     os.rename(f, join(path, basename(f).replace('20180810','2018_08_10')))

推荐阅读