1

約1200万行のファイルがあり、各行は次のようになります。

0701648016480002020000002030300000200907242058CRLF

私が達成しようとしているのは、データの前に行番号を追加することです。番号は固定長でなければなりません。

この背後にある考え方は、このファイルを SQLServer テーブルに一括挿入し、各行に一意の識別子を必要とする特定の操作を実行できるようにすることです。データベース側でこれを試してみましたが、良いパフォーマンスを達成できませんでした (少なくとも 4 フィート未満、1 フィート未満が理想的です)。

現在、私はこのような解決策をPythonで試しています。

file=open('file.cas', 'r')
lines=file.readlines()
file.close()
text = ['%d %s' % (i, line) for i, line in enumerate(lines)]
output = open("output.cas","w")
output.writelines(str("".join(text)))
output.close()

これが機能するかどうかはわかりませんが、新しいことを試す前に、どのように機能し、副作用があるかを理解するのに役立ちます.

低レベル言語でそれを行うのに役立ちますか? 誰もこれを行うためのより良い方法を知っていますか?私はそれが行われたと確信していますが、何も見つけることができません.

ありがとう

4

3 に答える 3

4

なんてこった、一度に 1200 万行すべてを読まないでください。Python を使用する場合は、少なくとも次のようにします。

file = open('file.cas', 'r')
try:
    output = open('output.cas', 'w')
    try:
        output.writelines('%d %s' % tpl for tpl in enumerate(file))
    finally:
        output.close()
finally:
    file.close()

これは、一度に 1 行ずつファイルを処理するジェネレータ式を使用します。

于 2009-08-13T20:05:01.293 に答える
2

ステファノは正しい:

$ time cat -n file.cas > output.cas

時間の速さを確認できるように時間を使用してください。cat は純粋な C コードであるため、Python よりも高速です。

于 2009-08-13T21:04:47.793 に答える
2

cat -n を試してみませんか?

于 2009-08-13T21:02:05.757 に答える