1

3,642,197 行の長さの csv ファイルがあり、最も古い日付から最新の日付に並べ替える必要があります。

データベースを検索し、ユーザーが指定した「API」番号を含むすべての行を、後でグラフ化に使用するファイルに書き込むプログラムを作成しました。最も古い日付がファイルの最初にあることが非常に重要なので、この問題に直面しています: この巨大なファイルをまとめた人は、Excel から 3 つの異なるファイルを使用し、それを 1 つの csv に結合したため、日付がソートされていません。 .

最も古い日付がすべて最初に見つかるようにデータベースをフォーマットできれば、それが問題を解決する最も簡単な方法だと思います。

私はPythonに少し慣れていないので、このファイルを日付でソートする方法に頭を悩ませようとしています。Excelやlibreoffice calcでやってみましたが、最大行数を超えています。

ファイル内のテキストの例を次に示します。

"01/31/1986","25003050040000","SHA","シャノン",121,"",0,0,1324,31,False,P,""

2013 年から 1986 年までの記録があり、それらを分類する必要がありますが、これがどのように行われるかを理解できませんでした。私が検索したものから、私が理解できるものは何も見つかりません。

事前に多くの感謝と感謝を!

編集: 最も簡単な方法は Linux/unix を使用することです。単純なソート コマンドは、まさに私が話していることを実行します。

元。並べ替え -t/ -g -r -k3 -k1 -k2 infile.csv > outfile.csv

-t/ は区切り文字を設定し、-g は数値で並べ替え、-r はファイルを最終行から読み込みます。-k3 は年フィールド、-k1 は月フィールド、-k2 は日フィールドです。年順、月順、日順で並べ替えます。巨大な csv ファイルを時系列で並べ替える必要があり、それが Excel に収まらない場合、これは私が見つけた最も簡単な解決策です。

注: データがカンマで区切られていて、日付フィールドの後のフィールドが数字の場合、最初のカンマ区切り文字を / に変更して、末尾のデータが並べ替えに含まれないようにする必要があります。

元。02/25/1987,204928169562,62563959401,16375840 <-- データが正しくソートされるように、これを 02/25/1987/204928169562,62563959401,16375840 に変更する必要があります。

4

3 に答える 3

1

csv ファイルを読み取り、ばかげた日付をISO 8601形式に変換して、適切に並べ替えて処理を進めることができます。

csv_txt='''\
"01/31/1987","25003050040000","SHA","Shannon",121,"",0,0,1324,31,False,P,""
"01/31/1986","25003050040000","SHA","Shannon",121,"",0,0,1324,31,False,P,""
"01/31/1993","25003050040000","SHA","Shannon",121,"",0,0,1324,31,False,P,""
"01/28/1993","25003050040000","SHA","Shannon",121,"",0,0,1324,31,False,P,""
"01/31/2013","25003050040000","SHA","Shannon",121,"",0,0,1324,31,False,P,""'''

import csv
import datetime

data=[]
for line in csv.reader(csv_txt.splitlines()):
    d=datetime.datetime.strptime(line[0],'%m/%d/%Y')
    data.append([d.isoformat().partition('T')[0]]+line[1:])

for e in sorted(data):
    print e

版画:

['1986-01-31', '25003050040000', 'SHA', 'Shannon', '121', '', '0', '0', '1324', '31', 'False', 'P', '']
['1987-01-31', '25003050040000', 'SHA', 'Shannon', '121', '', '0', '0', '1324', '31', 'False', 'P', '']
['1993-01-28', '25003050040000', 'SHA', 'Shannon', '121', '', '0', '0', '1324', '31', 'False', 'P', '']
['1993-01-31', '25003050040000', 'SHA', 'Shannon', '121', '', '0', '0', '1324', '31', 'False', 'P', '']
['2013-01-31', '25003050040000', 'SHA', 'Shannon', '121', '', '0', '0', '1324', '31', 'False', 'P', '']
于 2013-10-30T01:40:46.910 に答える