我在學習Python,並且正在使用帶ints的輸入文件進行外部合併排序。我使用heapq.merge,並且我的代碼幾乎可以工作,但它似乎將我的行排序爲字符串而不是整數。如果我嘗試轉換爲整數,writelines將不接受數據。任何人都可以幫我找到替代方案嗎?另外,我是正確的思維,這將讓我排序文件比內存大實現外部合併排序
import itertools
from itertools import islice
import tempfile
import heapq
#converts heapq.merge to ints
#def merge(*temp_files):
# return heapq.merge(*[itertools.imap(int, s) for s in temp_files])
with open("path\to\input", "r") as f:
temp_file = tempfile.TemporaryFile()
temp_files = []
elements = []
while True:
elements = list(islice(f, 1000))
if not elements:
break
elements.sort(key=int)
temp_files.append(elements)
temp_file.writelines(elements)
temp_file.flush()
temp_file.seek(0)
with open("path\to\output", "w") as output_file:
output_file.writelines(heapq.merge(*temp_files))
謝謝 out.writelines(地圖(「{} \ n'.format, heapq.merge(*(圖(INT,F) 在文檔F)))) 是缺少的部分我試圖找到。 – user2361820