根据列表重命名文件

时间:2017-06-13 19:08:36

标签: python-3.x

我尝试使用列表重命名目录中的文件。到目前为止,我的代码只会在给我一个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)))

1 个答案:

答案 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结果比新名称列表长,则重命名将仅部分完成,因此最好检查一下两个列表在重新定位之前具有相同的大小。