Чтение файла с разделителями, в котором одно из полей может быть разбито на несколько строк (или нет) - PullRequest
0 голосов
/ 16 января 2019

У меня есть файл с разделителями, который вызывает у меня некоторое горе.Это разделенная труба, 6 полей.но поле 4 может быть разбито на несколько строк или не содержать ничего.Мне нужен способ удалить поля новой строки из поля 4.

Вот что у меня есть

import csv

#header is constant
#filedone|fieldtwo|three|four|five|six

content = """"asfdd|b|c|defg
ijklmnopque2
|record|sadfe

1324|b|c|defg
ijklmnopqu
dafdsasfde2asdf
dsfdsf
dsfadfadse2fdsase2
asdfasdfasfe2
|record|afasde

3243243|b|c|defg
ijklmnopque2
|record|adf

startrecord4|b|c||record|adf
"""

def extract():
    x = []
    y = []
    x = content.split('|')
    for item in x:
        if (len(item) > 4):
            y.append(item.replace('\n', '').replace('\r', ' '))
        else:
            y.append(item)
    print(y)


if __name__ == '__main__':
    extract()

Это запустится, и проблема простовывести все это в один ряд.Мне все еще нужно, чтобы он выводил индивидуальные записи (в данном случае 4) без перевода строки, но я не уверен, как это сделать.Могу ли я прочитать весь файл с помощью pandas.read_csv?Есть ли лучшее решение?

Заголовок постоянен во всех записях.

1 Ответ

0 голосов
/ 16 января 2019

Было бы ли решением для вас просто заменить все двойные новые строки заполнителем, чтобы затем явно удалить одиночные новые строки, после чего вы можете снова восстановить отдельные новые строки в позициях заполнителя?

Вы можете попробовать

sth_unique = '#%@#'
c = content.replace('\n\n', sth_unique).replace('\n', '').replace(sth_unique, '\n')
print(c)

#"asfdd|b|c|defgijklmnopque2|record|sadfe
#1324|b|c|defgijklmnopqudafdsasfde2asdfdsfdsfdsfadfadse2fdsase2asdfasdfasfe2|record|afasde
#3243243|b|c|defgijklmnopque2|record|adf
#startrecord4|b|c||record|adf                   
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...