私は文字列の長いリストをカンマで区切ります(基本的にcsvファイルは文字列に1行ずつ読み込み、split(datetime)の最初の要素に基づいて文字列のリストを並べ替えます
lines_sorted = sorted(lines, key=lambda x: datetime.datetime.strptime(lines, '%Y-%m-%d %H:%M:%S'))
を私はファイル内のすべての行からタプルを抽出するためにpartition
を使用と考えていた:
lines[0] = "2017-08-01 13:45:58,mytext,mytext2,mytext3,etc"
lines[1] = "2017-08-01 15:45:58,mytextx,mytext2x,mytext3x,etcx"
lines[2] = "2017-08-01 19:45:58,mytexty,mytext2y,mytext3y,etcy"
lines[3] = "..."
ポストthisから私は私の行のみ日付時刻で構成されます場合は、次のコードは動作する必要があることを知っています最初の要素には日付timepart:
for unsortedFile in glob('*.txt'):
with open(unsortedFile, 'r') as file:
lines = [line.rstrip('\n').partition(',') for line in file]
lines_sorted = sorted(lines, key=lambda x: datetime.datetime.strptime(lines[0], '%Y-%m-%d %H:%M:%S'))
..butはもちろん、これは動作しません:lines[0]
は最初のタプルが、ライン・リストの最初の項目を参照されていないため、「TypeError例外リストインデックスがstrをない、整数またはスライスでなければなりません」。私も.strptime(lines[lambda][0], '%Y-%m-%d %H:%M:%S'))
を使ってみましたが、どちらもうまくいきません。
私は何か間違っていることを知っています..どんな助けも大歓迎です。
[編集] ここでの答えは以下の友好のコメントから、です:ちょうどsplit
の最初の要素を取る
for unsortedFile in glob('*.txt'):
with open(unsortedFile, 'r', encoding="utf8") as file: #read each unsorted file to lines (list)
lines = [line.rstrip('\n') for line in file]
lines_sorted = sorted(lines,
key=lambda x: x.split(',', maxsplit=1)[0]
)
lines.clear()
with open(unsortedFile,'w', encoding="utf8") as file: #overwrite file
for line in lines_sorted:
file.write(line + '\n')
'lines [0]'を 'x [0]'に置き換えてください。 –
は、 'x.split( '、')[0]'(または 'x.partition( '、')[0]'でなければなりません) – User9123
あなたの文字列と日付のフォーマットを考えると、それらをソートするために 'datetime'オブジェクトに;通常の文字列の並び替えでも同じ結果が得られるので、 'key'パラメータを' sort'にドロップできます。 – jdehesa