2014-03-05 90 views
3

循環我有這個文件:文件讀取和在Python

-0 
1 
16 
9 
-00 
1 
3 
4 
0 
7 
9 
-000 
... 

,我想對它們進行排序,並將它們存儲到文件中。

我讀取文件將它們存儲在列表中,對列表進行排序,然後將列表保存到文件中。問題是它從第二個-x開始。

for line in file: 
     temp_buffer = line.split() 
     for i,word in enumerate(temp_buffer): 
      if "-" not in word: 
       if word in index_dict: 
        l1.append(word) 
       else: 
        l1.append(function(word)) 
      else: 
       l1.append(word) 
       l1.sort() 
       print(l1 , file=testfile) 
       del l1 
       l1 = [] 

因此,第一個循環會轉到else語句並存儲第一個-0而不存在單詞beween -0和-00。我應該如何解決這個問題? 我所要的輸出是這樣的:

-0 
1 
9 
16 
-00 
0 
1 
3 
4 
7 
9 
-000 
.... 

回答

7

您可以使用itertools.groupby爲「分區」的數據分組開始-,而不是線之間。凡與-開始時寫行,否則,寫排序線,如:

from itertools import groupby 

with open('input') as fin, open('output', 'w') as fout: 
    for k, g in groupby(fin, lambda L: L.startswith('-')): 
    if k: 
     fout.writelines(g) 
    else: 
     fout.writelines(sorted(g, key=int)) 
+0

這種列表?因爲我需要保持低複雜性。 – bill

+0

它將對每行之間的項目進行排序,以'-' –

+0

開頭,輸入文件非常大,所以我需要對元素進行分組,並且當組已滿時(所有-x -xxxx之間的元素)將其存儲到文件中。此功能是否會嘗試讀取所有文件並嘗試對其進行分組並將其存儲? – bill

0

您可以使用這樣的:在每個循環

l1=[] 
for i,word in enumerate(temp_buffer): 
      if "-" in word: 
       l1.sort() 
       print(l1) 
       l1 = [] 
      if word in index_dict: 
       l1.append(word) 
      else: 
       l1.append(function(word))