我會去爲他們分成基礎上,長度單獨的文件,然後將它們連接到一起之後 - 是這樣的:
from tempfile import TemporaryFile
from itertools import chain
保持文件長度 - >輸出文件的參考字典。在文件已經打開的情況下,寫入文件或創建一個新的臨時文件。
output = {}
with open('input') as fin:
for line in fin:
length = len(line.split())
output.setdefault(length, TemporaryFile()).write(line)
正如史蒂芬Rumbalski指出,這也可以用做defaultdict
:
from collections import defaultdict
output = defaultdict(TemporaryFile)
...
output[length].write(line)
臨時文件都將指向文件的末尾。其重置爲開頭,以便通過他們讀書的時候,我們再次得到數據...
for fh in output.values():
fh.seek(0)
採取行從每個文件中增加長度的秩序......並把它們所有寫到最終輸出文件。
with open('output', 'w') as fout:
fout.writelines(chain.from_iterable(v for k,v in sorted(output.iteritems())))
的Python應該再清理臨時文件在程序退出...
我將建立一個索引和排序這一點。例如,對於化學路徑文件中的每一行,在'(length,pointer_to_line)'的索引中創建一個元組。長度很簡單,因爲你可以做'len(row.split())'。該行的指針可以通過'f.tell()'或類似的東西來完成。對索引進行排序。一旦分類完畢,就可以使用它來按順序從化學路徑文件中抓取線條,然後將其寫入新文件。編輯:[這篇文章](http://stackoverflow.com/questions/7079473/sorting-large-text-data)可能會有所幫助。 – wflynny
我的第一反應是將這些數據放入數據庫中,而不是試圖用CSV強行處理(儘管您可能已經從數據庫中讀取數據!)。如果需要,您將擁有數據庫的好處,並且能夠使用Python + SQL在將來進行更多類型的數據分析。 – mdscruggs