读取分隔的文件,其中一个字段可以分成多行(或不行)

时间:2019-01-15 22:28:32

标签: python pandas csv delimited-text

我有一个定界文件,这使我有些悲伤。它是由管道分隔的6个字段。但是字段4可以分为几行,也可以不包含任何内容。我需要一种方法从字段4中删除换行符。

这就是我所拥有的

导入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 :(得分:2)

您是否可以使用占位符简单地替换所有 double 换行符,然后显式删除单个换行符,然后再在占位符位置恢复单个换行符呢?

您可以尝试

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