我在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),'')
他们是另一种解决这个问题的方法。
谢谢
答案 0 :(得分: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
时会删除空格,因此会出现令人困惑的错误消息;请注意异常消息中的引号之间是否有 nothing (Python 3已修复此问题)。
剥离空间:
current_chunk = filter(None, map(str.strip, item))
或避免将它们转换为整数:
current_chunk.sort(key=lambda x: int(x) if x.strip() else x)