2014-11-25 2 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

Желаемый результат.:
CCL4: 0.000; 0] 5 [3
H-: 0,000; -1] 4 [5
NH4 ^: 0,000; 1] 2 [3

+1

вы можете показать линию вы сортировка ??? – Hackaholic

+0

Полное содержание 1.txt, 2.txt и 3.txt поможет мне прояснить ситуацию, я думаю. Являются ли они отдельными однострочными файлами или внутри? – rchang

+0

Вы действительно ** просто ** хотите сортировать по первому символу в каждой строке? –

ответ

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. У меня есть следующее, но кажется, что я создал бесконечный цикл; для имен файлов в имя_файл: для линии в имя_файле: , если line.startswith (»«): line.lstrip() total_lines = [] для имен файлов в имя_файл: с открытым (имя_файлом), как INFILE: total_lines + = infile.readlines() для строки в отсортированных (итоговых): outfile.write (строка) –

+0

@AmyRose Check Edits. –

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 ('') –

+0

@AmyRose - вам нужно удалить пробел перед сортировкой в ​​виде пробелов перед буквенно-цифровыми символами. Просто используйте 'lstrip()', как показано в моем обновленном ответе. – mhawke

Смежные вопросы