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 回答