2014-03-05 92 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))