解析python中的管道分隔文件

问题描述:

我试图解析管道分隔文件并将值传递给列表,以便稍后我可以从列表中打印选择性值。解析python中的管道分隔文件

文件看起来像:

name|age|address|phone|||||||||||..etc 

它拥有超过100列。

+0

一个很好的问题将会有一个示例代码和您在尝试运行代码时遇到的任何错误。 – sachleen 2013-04-11 18:38:56

+2

[你已经问过这个问题,它已经关闭。](http://*.com/questions/15822744/file-parsing-in-python-for-a-pipe-delimited-file)是什么让你觉得这个时间会有所不同? – jwodder 2013-04-11 18:43:44

+3

@jwodder:不管什么原因,它似乎奏效了:这个问题得到了两个有效的答案,而另一个没有得到并被自动删除。投票重新开放,尽管可怕的得分。 – 2014-09-15 17:04:30

如果你解析一个非常简单的文件,该文件将不包含在实际的字段值进行任何|字符,你可以使用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() 
+0

我已经使用了拆分字符串方法,但它仅从第一个拆分列(名称)打印“n”。 – 2013-04-11 18:47:02

+0

如果你真的将我的代码复制并粘贴到一个文本文件并运行它,你会看到它的工作原理。也许你可以分享一些你的代码,这样我们就可以看到发生了什么问题? – vimist 2013-04-11 19:10:01

+0

with open(“abc.txt”,“r”)as infile: data = infile.read() fields = data.split('|') print(data [0]) – 2013-04-11 19:39:17

使用csv library

首先,注册您的话:

import csv 
csv.register_dialect('piper', delimiter='|', quoting=csv.QUOTE_NONE) 

然后,用你的方言上的文件:

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

import pandas as pd 

pd.read_csv(filename,sep="|") 

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