2017-06-13 83 views
0

我在嘗試使用列表重命名目錄中的文件。到目前爲止,我的代碼只會在給我一個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

由於循環是嵌套的,因此您將重命名應用於同一個文件。

因此,它第一次工作,並下次嘗試重命名已被重命名的文件。

重組您的代碼。帶有單環

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結果比新名稱列表更長,重命名只會部分完成,因此最好在重新更新之前檢查兩個列表的大小是否相同。

+0

感謝您向我介紹zip的事情,我無法弄清楚如何訂購它,所以它可以工作,但這很有效。 – Appelynn