在python中解析管道分隔文件

Joh*_*Doe 4 python parsing python-3.x delimiter-separated-values

我正在尝试解析管道分隔文件并将值传递到列表中,以便稍后我可以从列表中打印选择性值.

该文件看起来像:

name|age|address|phone|||||||||||..etc
Run Code Online (Sandbox Code Playgroud)

它有超过100列.

Spe*_*bun 30

使用csv库.

首先,注册你的方言:

import csv
csv.register_dialect('piper', delimiter='|', quoting=csv.QUOTE_NONE)
Run Code Online (Sandbox Code Playgroud)

然后,在文件上使用您的方言:

with open(myfile, "rb") as csvfile:
    for row in csv.DictReader(csvfile, dialect='piper'):
        print row['name']
Run Code Online (Sandbox Code Playgroud)

  • 我很感谢所提出的解决方案,但我遇到了一些小问题。通过在 *open()* 语句中添加 **encoding='utf-8'** 解决了错误“迭代器应该返回字符串,而不是字节(您是否以文本模式打开文件?)”。第二个问题是使用 **mode='r'** 而不是解决方案中给出的 **mode='rb'** 解决。 (3认同)

vim*_*ist 15

如果您正在解析一个非常简单的文件,该文件不包含|实际字段值中的任何字符,您可以使用split:

fileHandle = open('file', 'r')

for line in fileHandle:
    fields = line.split('|')

    print(fields[0]) # prints the first fields value
    print(fields[1]) # prints the second fields value

fileHandle.close()
Run Code Online (Sandbox Code Playgroud)

  • 如果其中一个字段中有管道,则此方法将不起作用。使用实际的 CSV 库可以更好地管理这一点。 (2认同)

小智 10

import pandas as pd

pd.read_csv(filename,sep="|")
Run Code Online (Sandbox Code Playgroud)

这会将文件存储在数据框中。对于每一列,您可以应用条件以选择要打印的所需值。执行时间很短。我尝试了111047行。