如何在Python上更改特定文件夹中的多个文件名?

如何在Python上更改特定文件夹中的多个文件名?,python,path,rename,Python,Path,Rename,因此,我一直在使用以下代码更改特定文件夹中所有文件的文件名 import os [os.rename(f,f.replace('20180810','2018_08_10')) for f in os.listdir()] 我遇到的问题是,每当我使用这段代码时,我必须保存它的副本并将其粘贴到文件所在的文件夹中。我希望能够有一个通用代码,我可以指定路径,而不必在该文件夹中。我尝试了以下操作,但出于某种原因,它显示找不到该文件: path = 'E:/CSVFILES/20180808/' [os

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

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),它会运行良好,并显示文件夹中的文件,因此我不确定它为什么不工作


谢谢

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

谢谢你的回复!当我尝试这样做时,我得到了以下错误:FileNotFoundError:[WinError 3]系统找不到指定的路径:“E:/CSVFILES/20180808\\ismRawTec\u G10\u 20180808.csv”->“E:/CSVFILES/2018\u 08\ismRawTec\u G10\u 2018\u 08\u 08.csv”,这是因为您所在的文件位于名为
20180808
的目录中,因此,您的
replace
方法尝试同时替换这两个文件,并将文件写入不存在的目录。你可以用<代码> BaseNeN[/Cuff]函数来修复这个问题。请参阅上面的我的编辑。嗨,朱利安。如果这个或任何答案都解决了你的问题,请点击检查标记来考虑。这向更广泛的社区表明,你已经找到了一个解决方案,并给回答者和你自己带来了一些声誉。没有义务这样做。