Почему этот метод замены не работает должным образом - PullRequest
0 голосов
/ 01 октября 2019

У меня есть файл, данные которого выглядят примерно так:

1 1:-0.03125 2:0.236364 3:0.142857 4:-0.107438 5:0.129032 6:0.163636 7:0.242105
2 1:-0.03125 2:0.472727 3:0.761905 4:0.123967 6:0.472727 7:0.347368
....

Там, где всего несколько тысяч строк. Я пытаюсь преобразовать это в CSV-файл.

Я попробовал следующий код:

with open("file1.test", "r") as infile:
    with open("file1.csv", "w") as outfile:
        for line in infile:
            new_line = line
            i = 1
            for i in range(1,8):
                to_replace = " " + str(i) + ":"
                new_line = new_line.replace(to_replace, ",", 1)
            new_line = line[:2] + "," + line[2:]
            new_line = new_line.replace(" ", "", 1)


Но он не работает, как ожидалось. Строка new_line = new_line.replace(" ", "", 1) работает, но когда я пытаюсь заменить «1:» запятой, она не обновляется. Я хочу, чтобы мой окончательный файл выглядел как "

1, -0.03125,0.236364,0.142857,-0.107438,0.129032,0.163636,0.242105
2,-0.03125,0.472727,0.761905,0.123967,0.472727,0.347368 

Есть идеи, что я делаю неправильно?

Ответы [ 2 ]

1 голос
/ 01 октября 2019

Мне нравится

import re  
with open("file1.test", "r") as infile:
    with open("file1.csv", "w") as outfile:
        for line in infile:
            outfile.write(re.sub(' [1-7]:',',',line))
1 голос
/ 01 октября 2019

Вы можете попробовать этот подход преобразования для каждой строки:

>>> a = '1 1:-0.03125 2:0.236364 3:0.142857 4:-0.107438 5:0.129032 6:0.163636 7:0.242105'
>>> ','.join( [i.split(':')[-1] for i in a.split()] )
'1,-0.03125,0.236364,0.142857,-0.107438,0.129032,0.163636,0.242105'

, когда вся ваша программа будет выглядеть так:

with open("file1.test", "r") as infile:
    text = [i.strip() for i in infile.readlines()]

output = []
for t in text :
    output.append( ','.join( [i.split(':')[-1] for i in t.split()] ) )

with open("file1.csv", "w") as outfile:
    outfile.write( '\n'.join( output ) )
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...