Python 读取带分隔符的文件,其中一个字段可以拆分为多行(或不拆分)

Python 读取带分隔符的文件,其中一个字段可以拆分为多行(或不拆分),python,pandas,csv,delimited-text,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 dsf

我有一个带分隔符的文件,这让我有点悲伤。它是以管道分隔的,有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\u csv读取整个文件吗?有更好的解决办法吗


标题在所有记录中都是恒定的。

用占位符替换所有双换行符,然后明确删除单换行符,然后可以在占位符位置再次恢复单换行符,这是一种解决方案吗

你可以试试

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                   

用占位符简单地替换所有双换行符,然后明确地删除单个换行符,然后可以再次在占位符位置恢复单个换行符,这是一种解决方案吗

你可以试试

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