【发布时间】:2013-01-17 22:30:09
【问题描述】:
编辑:我的最终解决方案见底部
我有一个包含 ~12,700 个文本文件的目录。
他们有这样的名字:
1 - Re/Report Novenator 公开呼吁埋葬 - Lizbett 于 2009 年 9 月 10 日星期四.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 中查找它们,用相关值替换它们,然后用调整后的标题保存文件并继续到下一个文件。
做这样的事情最好的方法是什么?我是一个 python 新手,但已经玩得足够好,可以按照大多数指示或建议感到自在。谢谢:)
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__'
【问题讨论】:
-
一些实际数据的例子和预期的结果一样好......
-
当然可以。文本文件:cl.ly/192b2H0l0f1Y。完整的 CSV:cl.ly/3m2v2e072E2U。带有文件 ID 的地图:cl.ly/112n3A3H1Z3O.
标签: python dictionary rename