0

Pythonで外部ソートを実装していますが、現在この問題に悩まされています。整数を含む大きなテキスト ファイルを小さなチャンクに分割し、これらのチャンクを並べ替えようとしています。ここまで書けるようになりました。

with open(fpath,'rb') as fin:
    input_iter = iter(lambda: fin.read(40 * 1024),'')
    for item in input_iter:
        print item
        current_chunk = list(item)
        # sort the buffers
        current_chunk.sort(key = lambda x : int(x))

このコードを実行すると、エラーが発生しました

File "problem3.py", line 68, in <lambda>
current_chunk.sort(key = lambda x : int(x))
ValueError: invalid literal for int() with base 10: ''

これinput_iter = iter(lambda: fin.read(40 * 1024),'') は、この問題を克服するための別の方法です。ありがとうございました

4

1 に答える 1

3

入力に空白があります:

>>> int(' ')
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ValueError: invalid literal for int() with base 10: ''
>>> int('\n')
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ValueError: invalid literal for int() with base 10: ''
>>> int('\t')
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ValueError: invalid literal for int() with base 10: ''

への変換時に空白が削除されるintため、紛らわしいエラー メッセージが表示されます。例外メッセージの引用符の間に何もないことに注意してください (Python 3 ではこれが修正されています)。

スペースを取り除く:

current_chunk = filter(None, map(str.strip, item))

またはそれらを整数に変換しないでください:

current_chunk.sort(key=lambda x: int(x) if x.strip() else x)
于 2013-09-13T07:27:39.233 に答える