【问题标题】:Parsing a double pipe delimited file in python [duplicate]在python中解析双管道分隔文件[重复]
【发布时间】:2020-03-01 14:10:01
【问题描述】:

需要解析一个由||分隔的数据文件,数据如下

Customer No||Company Code||Name||Address||Telephone||Fax||Email||Term of Payment||Block||Created On||Last Changed On
000111111||A75||My Company||My Address||01-11111111||01- 11111111||test@test.com||A075||||1.11.2019||11.11.2019

使用csv模块,解析的代码是

csv_reader = csv.reader(csv_file, delimiter='||')

执行时出现以下错误

TypeError: "delimiter" must be a 1-character string

我使用的是 Python 3.7。

【问题讨论】:

    标签: python python-3.x csv parsing


    【解决方案1】:

    csv documentation

    用于分隔字段的单字符字符串。它默认为 ','。

    这是一个硬约束。我能想到的技巧之一是在被csv.reader 读取之前对内容字符串进行一些修改。您可以在输入文件的每一行上使用replace('||', '|') 方法,然后将其作为参数提供给csv.reader

    input_file  = open('test.csv', "rb")
    reader = csv.reader((line.replace('||', '|') for line in input_file), delimiter='|')
    

    【讨论】:

    • 这似乎很危险,因为它会从恰好出现在字段中的任何单个 | 中生成字段分隔符。至少先检查这种情况是否存在是有用的。
    • 同意你的看法@rici,但这也是根据文件可能会或可能不会起作用的黑客之一。
    【解决方案2】:

    您可以使用 pandas 库轻松完成此操作。

    import pandas as pd
    df = pd.read_csv('temp.csv', sep='\|\|', 
                  engine='python', header=None)
    print(df)
    

    【讨论】:

      猜你喜欢
      • 2013-04-04
      • 2021-12-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-06-18
      • 1970-01-01
      • 1970-01-01
      • 2011-10-18
      相关资源
      最近更新 更多