編集:私の最終的な解決策については、下部を参照してください
~12,700 のテキスト ファイルのディレクトリがあります。
次のような名前があります。
1 - Re/ Report Novenator public call for bury - by Lizbett on Thu, 10 Sep 2009.txt
先頭のデジタル値はファイルごとに増加します (たとえば、ディレクトリ内の最後のファイルは "12,700 - " で始まります)。
残念ながら、ファイルはタイムソートされていないため、そうする必要があります。幸いなことに、ID 番号がマッピングされた別の CSV ファイルがあります。たとえば、上記の例の 1 は実際には 25 である必要があり (その前に 24 のメッセージがあるため)、2 は実際には 8 であり、3 は 1 である必要があります。 、 そのようです:
OLD_FILEID TIMESORT_FILEID
21 0
23 1
24 2
25 3
関連する値と交換する必要があるこの 1 つの先行番号を除いて、ファイル タイトルを変更する必要はありません。私の頭では、これが機能する方法は、ファイル名を開き、ダッシュの前に表示される数字を確認し、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__'