2013-04-11 119 views
1

我試圖解析管道分隔文件並將值傳遞給列表,以便稍後我可以從列表中打印選擇性值。解析python中的管道分隔文件

文件看起來像:

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

它擁有超過100列。

+0

一個很好的問題將會有一個示例代碼和您在嘗試運行代碼時遇到的任何錯誤。 – sachleen 2013-04-11 18:38:56

+2

[你已經問過這個問題,它已經關閉。](http://stackoverflow.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

回答

12

如果你解析一個非常簡單的文件,該文件將不包含在實際的字段值進行任何|字符,你可以使用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

19

使用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'] 
3
import pandas as pd 

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

這將存儲在數據幀的文件。對於每列,您可以應用條件來選擇要打印的所需值。執行需要很短的時間。我嘗試了111047行。