2016-01-14 3 views
2

У меня есть текстовый файл со следующей информацией (каждое условие в отдельной строке):несколько списков, сохраненных в одном текстовом файле

UP_aic up 920.5 4 17280.0 down 17764.5 2 28186.5 up 28249.1 
DOWN_aic down 941.0 2 8800.5 up 8894.3 down 11691.0 2 20316.2 up 
20363.1 4 26901.8 down 26901.8 
UP_adc down 1477.1 
DOWN_adc up 1752.8 

Я реализовал код для удаления 2s и 4s и их соответствующие моменты времени (см. ниже), и все, что я хочу, - это сохранить эту информацию в другом текстовом файле!

Однако из всех 15 (или около того) попыток этим утром мне удалось сохранить последнюю строку (DOWN_adc up 1752.8) различными способами: обычным, вертикальным, а не горизонтальным, все символы «склеены» и т. Д. И т. Д.

Таким образом, я сохранил самый простой способ записи здесь. Я понимаю, что все предыдущие строки удаляются следующей строкой, поэтому остается только последняя, ​​но я не могу понять, как это предотвратить.

Вот код:

from sys import argv 
from itertools import tee, islice, chain, izip 
script, from_file, to_file = argv 
print "Here's your file %r:" %from_file 

fhand=open(from_file) 
total = 0 
for line in fhand: 
    words=line.split() 
    def previous_and_next(some_iterable): 
     items, nexts = tee(some_iterable, 2) 
     nexts = chain(islice(nexts, 1, None), [None]) 
     return izip(items, nexts) 
    for item, nxt in previous_and_next(words): 
     if item=='2': 
      words.remove(item) 
      words.remove(nxt) 
     elif item=='4': 
      words.remove(item) 
      words.remove(nxt) 
    print words 

with open(to_file, 'w') as output:   
     output.write(str(words)+'\n') 

fhand.close() 
output.close() 

Итак, как мне сохранить данные, как это снова каждое условие в отдельной строке (угловые скобки, запятые и т.д. не проблема)?

['UP_aic', 'up', '920.5', 'down', '17764.5', 'up', '28249.1'] 
['DOWN_aic', 'down', '941.0', 'up', '8894.3', 'down', '11691.0', 'up', '20363.1', 'down', '26901.8'] 
['UP_adc', 'down', '1477.1'] 
['DOWN_adc', 'up', '1752.8'] 
+1

Вы имеете в виду ['str.join()'] (https://docs.python.org/3/library/stdtypes.html#str.join)? –

+0

Вы уверены, что хотите «печатать слова» вместо добавления каждого слова в список «list», который затем можно прокручивать и записывать в файл? – TigerhawkT3

+0

TigerhawkT3 - заявление печати можно удалить, я просто попросил, чтобы мой код делал то, что я хочу, чтобы он делал. Kevin, str.join() не работает для списка ... – monechka

ответ

0

Вызов write() находится вне цикла for, поэтому words записывается только в файл после завершения цикла. К этому моменту он содержит все, что было в последней строке, прочитанной.

не

Изменить код на что-то вроде

def previous_and_next(some_iterable): 
    items, nexts = tee(some_iterable, 2) 
    nexts = chain(islice(nexts, 1, None), [None]) 
    return izip(items, nexts) 

with open(to_file, 'w') as output:  
    for line in fhand: 
     words = line.split() 
     for item, nxt in previous_and_next(words): 
      if item == '2': 
       words.remove(item) 
       words.remove(nxt) 
      elif item == '4': 
       words.remove(item) 
       words.remove(nxt) 
     print words 
     output.write(str(words)+'\n') 

Нет необходимости называть output.close(), это то, что with блок для.