Как я могу очистить текстовые файлы в Python? - PullRequest
2 голосов
/ 26 апреля 2011

У меня есть текст в файле, который выглядит следующим образом:

text1 5,000 6,000
text2 2,000 3,000
text3 
           5,000 3,000
text4 1,000 2000
text5
          7,000 1,000
text6 2,000 1,000

Есть ли способ исправить это в Python, чтобы в случае отсутствия чисел после текстовой строки числа в следующей строке можно было разместить в строке выше:

text1 5,000 6,000
text2 2,000 3,000
text3 5,000 3,000
text4 1,000 2000
text5 7,000 1,000
text6 2,000 1,000

Спасибо!

Ответы [ 2 ]

3 голосов
/ 26 апреля 2011

Предполагая, что в каждой строке должно быть ровно три слова, вы можете использовать

tokens = (x for line in open("file") for x in line.split())
for t in zip(tokens, tokens, tokens):
    print str.join(" ", t)

Редактировать : Поскольку вышеуказанное предварительное условие не выполняется, вот реализация, которая на самом деле смотрит на данные:

from itertools import groupby
tokens = (x for line in open("file") for x in line.split())
for key, it in groupby(tokens, lambda x: x[0].isdigit()):
    if key:
        print str.join(" ", it)
    else:
        print str.join("\n", it),
1 голос
/ 26 апреля 2011

Предполагая, что логические строки «продолжаются» в строках, которые начинаются с пробела (и содержат произвольное количество записей), вы можете использовать это:

>>> collapse_space = lambda s: str.join(" ", s.split())
>>>
>>> logical_lines = []
>>> for line in open("text"):
...   if line[0].isspace():
...     logical_lines[-1] += line #-- append the continuation to the last logical line
...   else:
...     logical_lines.append(line) #-- start a new logical line
... 
>>> l = map(collapse_space, logical_lines)
>>>
>>> print str.join("\n", l)
text1 5,000 6,000
text2 2,000 3,000
text3 5,000 3,000
text4 1,000 2000
text5 7,000 1,000
text6 2,000 1,000
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...