我尝试使用列表重命名目录中的文件。到目前为止,我的代码只会在给我一个FileNotFoundError之前重命名第一个文件。如何阅读列表并按照与其相同的顺序重命名我的文件?
import os
import glob
fileLib = ('/filepath1/')
ref = ('/filepath2/ref.csv')
for file in glob.glob(os.path.join(fileLib, '*.csv')):
with open(ref) as list1:
line = list1.read().split(',\n')
for name in line:
os.rename(file, os.path.join(fileLib, '{}.csv'.format(name)))
答案 0 :(得分:0)
您将重命名应用于同一文件,因为循环是嵌套的。
所以它第一次工作,下次尝试重命名已经重命名的文件。
重新组织您的代码。首先,阅读新名称文件:
fileLib = '/filepath1/'
ref = '/filepath2/ref.csv'
with open(ref) as list1:
newnames = list1.read().split(',\n')
然后zip
目录内容和新名称列表以及单个循环:
for file,newname in zip(glob.glob(os.path.join(fileLib, '*.csv')),newnames):
os.rename(file, os.path.join(fileLib, '{}.csv'.format(newname)))
由于zip
在其中一个可迭代参数用尽时停止,如果glob
结果比新名称列表长,则重命名将仅部分完成,因此最好检查一下两个列表在重新定位之前具有相同的大小。