2014-11-25 36 views
0

我已經將一些文件合併在一起,但是我想要執行的操作是按照第一個字符按字母順序排列輸出。我嘗試了以下,但這不起作用。按第一個字符對文檔排序

filenames = ['1.txt', '2.txt', '3.txt'] 
with open('output.txt', 'w') as outfile: 
    for fname in filenames: 
     with open(fname) as infile: 
      for line in infile: 
       outfile.write(sorted(line)) 

這是output.txt的,因爲它代表:
NH4 ^:0.000; 1] 2 [3
H-:0.000; -1] 4 [5
CCL4:0.000; 0] 5 [3

所需output.txt:
CCL4:0.000; 0] 5 [3
H-:0.000; -1] 4 [5
NH 4:0.000; 1] 2 [3

+1

可以告訴你,你的排序行??? – Hackaholic 2014-11-25 14:11:53

+0

我認爲,1.txt,2.txt和3.txt的全部內容也有助於澄清事情。他們每個單行文件,還是有更多的內部? – rchang 2014-11-25 14:26:09

+0

你真的**只是想排序每行中的第一個字符嗎? – 2014-11-25 14:29:12

回答

1

更新

from operator import itemgetter 
    filenames = ['1.txt', '2.txt', '3.txt'] 
    with open('output.txt', 'w') as outfile: 
     total_lines = [] 

     for fname in filenames: 
      with open(fname) as infile: 
       total_lines += map(lambda s: s.strip(' '), infile.readlines()) 

     for line in sorted(total_lines): 
      outfile.write(line) 
+0

感謝@Dinesh,我還想從1,2和3.txt中的行首開始刪除任何空白空間。我有以下但似乎我創造了一個無限循環; 用於在文件名中FNAME: 用於FNAME行: 如果line.startswith(」「): line.lstrip() total_lines = [] 用於在文件名中FNAME: 具有開放(FNAME)作爲infile中: total_lines + = infile.readlines() for line in sorted(total_lines): outfile.write(line) – 2014-11-25 16:46:48

+0

@AmyRose檢查編輯。 – 2014-11-26 06:20:15

1

更新排序之前去除前導空白。

你的問題有點兒可以解釋,但是假設你想對多個文件中的所有行進行排序,你可以簡單地使用fileinput.input()

import fileinput 

filenames = ['1.txt', '2.txt', '3.txt'] 
with open('output.txt', 'w') as outfile: 
    outfile.writelines(sorted(line.lstrip() for line in fileinput.input(filenames))) 

或者,如果你想不區分大小寫的排序:

import fileinput 
import string 

filenames = ['1.txt', '2.txt', '3.txt'] 
with open('output.txt', 'w') as outfile: 
    outfile.writelines(sorted((line.lstrip() for line in fileinput.input(filenames)), key=string.lower)) 
+0

謝謝! 1.txt中的行以空格開頭,我將如何從output.txt中刪除此空間?我有:如果行中的文件名開頭(''): line = lstrip('') – 2014-11-25 15:50:09

+0

@AmyRose - 您需要刪除空白前排序爲空白字母數字字符之前排序。只需使用'lstrip()',如我更新的答案中所示。 – mhawke 2014-11-26 00:22:37