-1

現在、.txt ファイルをプロプライエタリ ソフトウェアにインポートしようとしていますが、継続的にエラーが発生するようです。.txt ファイルのサイズは約 2GB で、約 5,600 万行あります。

メーカーに問い合わせたところ、ラインの 1 つにエラーがある可能性があるとのことでした。各行には MD5 ハッシュ値 (32 文字) が含まれている必要があるため、Python v2.7 を使用して、.txt ファイルをスキャン処理して各行の長さを確認し、「問題のある」行の値を出力しようとしています。 .

これが私が試したことです:-

f = open("x.txt")
contents = f.readlines()
f.close()
for line in contents:
    if line(len) == 32:
        continue
    else:
        print line

残念ながら、このコードを試すとエラーが発生します:-

File "<pyshell#30>", line 2, in <module>
  if line(len) == 32:
TypeError: 'str' object is not callable

だから私は、「行」を整数に変換しなければならないと信じて、以下を試しました:-

for line in contents:
    if int(line)(len) == 32:
        continue
    else:
        print line

しかし、それはちょうど次のエラーをもたらしました:-

ValueError: invalid literal for int() with base 10: '000000000000000012452154365298BD"

前述のように、私が探しているのは、.txt ファイルのすべての行を読み取り、それが有効な MD5 ハッシュ値でない場合は、値を画面に出力するか、値を削除することです。

どうもありがとう

[編集]男子生徒の間違いであることが判明しました。皆さんありがとう

4

3 に答える 3

9

ファイルのサイズは 2 GB であるためline(len)len(line). ファイル全体をメモリに読み込んでいますが、これは不要であり、十分な RAM がない場合はメモリ不足エラーが発生する可能性があります。これが私がそれを行う方法です:

with open("x.txt") as f:
    for line_no, line in enumerate(f):
        # Remember not to count the newline character
        if len(line.strip()) != 32:
            print line_no, line

文字数が間違っているすべての行を削除したい場合、最も簡単な方法は、新しい正しいファイルを作成することです。

with open("outfile.txt", "w") as out:
    with open("x.txt") as f:
        for line_no, line in enumerate(f):
            if len(line.strip()) == 32:
                out.write(line)
            else:
                print "Removing line {0}".format(line_no)

スクリプトが実行された後、新しいファイルが正常であることを確認してから、古いファイルをバックアップ ディレクトリに移動し、新しいファイルの名前を変更しx.txtます。

于 2012-10-23T09:29:33.223 に答える
7

line(len)間違っています、len(line)代わりに使用してください

于 2012-10-23T09:27:17.063 に答える
0

逆にやっているのではないかと思います。len(line)の代わりに使用してくださいline(len)

于 2012-10-23T09:29:53.763 に答える