2015-06-07 5 views
-1

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

Run#1 Step#1 > Connecting to server 
Run#1 Step#2 > Connected OK 
Run#1 Step#3 > Sending request: { 
    "path": "/testpage", 
    "time": "2015-06-07T00:00:00.000Z" 
} 
Run#1 Step#4 > Request sent OK 

Что мне нужно сделать, это обработать этот файл. Было бы проще, если бы каждый шаг был напечатан на отдельной строке:

Run#1 Step#1 > Connecting to server 
Run#1 Step#2 > Connected OK 
Run#1 Step#3 > Sending request: { "path": "/testpage", "time": "2015-06-07T00:00:00.000Z" } 
Run#1 Step#4 > Request sent OK 

Как я могу сделать это (либо в баш или рубина/Python/... скрипт)?

+0

Почему некоторые линии соединены? –

+0

@PadraicCunningham Что вы имеете в виду? какие линии соединены? – xaxa

+0

'Run # 1 Step # 3> Отправка запроса: {" path ":"/testpage "," time ":" 2015-06-07T00: 00: 00.000Z "}' –

ответ

0

1) дробление ("\ п") 2) заменить ("Run #", "\ nRun #") 3) удалить первую строку ("\ п")

+0

text = text.replace ("\ n", "") .replace ("Run #", "\ nRun #"). Replace ("", "") –

1

гну СЭД решение

cat file | sed ':a; N; $! ba; s/\n//g; s/Run#/\nRun#/g;' | sed '1d;' > outputfile 
+0

Это отличная идея, но она не работает К сожалению. Файл не изменяется вообще. Я не понимаю, почему ... – xaxa

+0

теперь он будет работать, ранее только для консоли, теперь есть перенаправление на выходной файл (назовите его, как вы хотите) – josifoski

+0

Нет, я перенаправил файл. Возможно, линейные окончания неверны (стиль окна)? – xaxa

-1

Если все ваши файлы выглядят точно так же, как это вы можете решить проблему с этим кодом

file=open(filename,"r+") 

lines = file.readlines() 
for line in lines: 
    if (line.startswith("Run") and not "{" in line) or "}" in line: 
     print(line,end='') 
    else: 
     print(line.replace("\n",""), end='') 
1

с помощью Python группы линий на основе линий, начиная с Run# и присоединиться юбые участки линий, которые не начинаются с Run # предыдущей Run # линии, независимо от содержания, он будет также заменить исходный файл и вам не нужно читать весь файл в память:

from itertools import groupby 
from tempfile import NamedTemporaryFile 
from shutil import move 

with open("file.txt") as f, NamedTemporaryFile("w",dir=".",delete=False) as out: 
    grouped = groupby(f, key=lambda x: not x.startswith("Run#")) 
    for k, v in grouped: 
     if not k: 
      v, nxt = "".join(v), next(grouped, " ")[1] 
      out.write("{}{}\n".format(v.rstrip(), "".join(map(str.strip, nxt)))) 
     else: 
      out.writelines(v) 

move(out.name,"file.txt") 

Выход:

Run#1 Step#1 > Connecting to server 
Run#1 Step#2 > Connected OK 
Run#1 Step#3 > Sending request: {"path": "/testpage","time": "2015-06-07T00:00:00.000Z"} 
Run#1 Step#4 > Request sent OK 
Смежные вопросы