編輯重命名文件名的一部分:見底部的我最終解決批從查找文件
我有〜12700文本文件的目錄。
他們有這樣的名字:
1 - 回覆/報告Novenator公開徵求埋葬 - 通過Lizbett上週四,9月10日2009.txt
如果每個文件的領先的數字遞增(例如目錄中的最後一個文件以「12,700 - 」開頭)。
不幸的是,這些文件沒有被排序,我需要它們。幸運的是,我有一個單獨的CSV文件,其中ID號碼被映射,例如1在上面的例子確實應該25(因爲有收到24級的消息),和2應該真正是8位,並且3應爲1,等等,例如:
OLD_FILEID TIMESORT_FILEID
21 0
23 1
24 2
25 3
我不除了需要與相關值交換的這個單獨的前導號碼之外,還需要更改文件標題中的任何內容。在我的腦海中,這樣做的方式是打開文件名,檢查短劃線之前出現的數字,在CSV中查找它們,將它們替換爲關聯的值,然後用調整後的標題保存文件,然後轉到到下一個文件。
什麼是最好的方式去做這樣的事情?我是一個蟒蛇新手,但玩了足夠的感覺舒服遵循大多數方向或建議。謝謝:)
E:遵照下面的說明是盡我所能我這樣做,這是不行的,但我不知道爲什麼:
import os
import csv
import sys
#open and store the csv file
with open('timesortmap.csv','rb') as csvfile:
timeReader = csv.reader(csvfile, delimiter = ',', quotechar='"')
#get the list of files
for filename in os.listdir('DiggOutput-TIMESORT/'):
oldID = filename.split(' - ')[0]
newFilename = filename.replace(oldID, timeReader[oldID],1)
os.rename(oldID, newFilename)
我得到的錯誤是:
TypeError: '_csv.reader' object is not subscriptable
我不使用DictReader,但那是因爲當我使用csv.reader和打印的行,它看起來像這樣:
['12740', '12738']
['12742', '12739']
['12738', '12740']
['12737', '12741']
['12739', '12742']
當我使用DictReader它看起來像這樣:
{'FILEID-TS': '12738', 'FILEID-OLD': '12740'}
{'FILEID-TS': '12739', 'FILEID-OLD': '12742'}
{'FILEID-TS': '12740', 'FILEID-OLD': '12738'}
{'FILEID-TS': '12741', 'FILEID-OLD': '12737'}
{'FILEID-TS': '12742', 'FILEID-OLD': '12739'}
我在終端得到這個錯誤:
File "TimeSorter.py", line 16, in <module>
newFilename = filename.replace(oldID, timeReader[oldID],1)
AttributeError: DictReader instance has no attribute '__getitem__'
實際數據的一些例子將是很好的,以及預期的結果... –
當然可以。文本文件:http://cl.ly/192b2H0l0f1Y。完整CSV:http://cl.ly/3m2v2e072E2U。帶有文件ids的地圖:http://cl.ly/112n3A3H1Z3O。 – peteyreplies