python - 如何在 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),它会运行良好并显示文件夹中的文件,所以我不确定它为什么不起作用。
谢谢!
解决方案
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')))
推荐阅读
- python - 有什么方法可以设置通知时间吗?
- php - Woocommerce 在简码中显示自定义购物车总数
- reactjs - “使用 create-react-app 创建的网站。” 在我的 React 应用程序的所有页面上显示为描述
- git - npm - 将补丁合并到更高的主要版本
- html - (已关闭)无法将图像放入 div 容器中
- python-3.x - 当我们与 python re 比较时,为什么 spark regexp_extract 太慢了
- codeigniter - !empty 函数在使用 codeigniter 登录时不起作用
- reactjs - React "text/html" 不是有效的 JavaScript MIME 类型
- c++ - initUndistortRectifyMap 中的断言失败 (K.size() == Size(3, 3) && (D.empty() || D.total() == 4))
- python - how to copy values of one column of a dataframe to another column of other dataframe in pandas?