2010-06-22 105 views
2

如果在文件中出現的值是不是「或分隔值Python腳本從文件中讀取並獲得價值

  "Name" "Tom" "CODE 041" "Has" 
     "Address" "NSYSTEMS c/o" "First Term" "123" 18 
     "Occ" "Engineer" "Level1" "JT" 18 

應如何Python腳本編寫,以便讓所有的上述數值單獨

+1

我沒有看到一個逗號在你的例子中 - 你能否詳細說明一下? – 2010-06-22 09:52:42

+2

請發佈您嘗試的代碼。 – 2010-06-22 10:07:28

回答

3

你的問題有點含糊,在你的例子中沒有逗號,所以提供一個好的答案有點困難。

在包含

"Name" "Tom" "CODE 041" "Has" 
"Address" "NSYSTEMS c/o" "First Term" "123" 18 
"Occ" "Engineer" "Level1" "JT" 18 

這個腳本

import csv 
reader = csv.reader(open('test.txt'), delimiter=' ', quotechar='"') 
for row in reader: 
    print(row) 

您的示例文件產生

['Name', 'Tom', 'CODE 041', 'Has'] 
['Address', 'NSYSTEMS c/o', 'First Term', '123', '18'] 
['Occ', 'Engineer', 'Level1', 'JT', '18'] 

這假定值之間的分隔符是一個空格。如果是選項卡,請改用delimiter='\t'

如果分隔符在整個文件中發生更改,那麼使用這種方法會很失敗 - 在這種情況下,它們不再是有效的CSV/TSV文件。但所有這些只是猜測,直到您可以提供一些您想要分析的數據的實際和相關示例。

+0

+1,當然應該使用csv閱讀器。我應該想到這一點。 – Mizipzor 2010-06-22 10:07:22

1

的另一種方法使用CSV閱讀器。

in.txt

"Name" "Tom" "CODE 041" "Has" 
"Address" "NSYSTEMS c/o" "First Term" "123" 18 
"Occ" "Engineer" "Level1" "JT" 18 

parse.py

for i in [line.split('"') for line in open("in.txt")]: # split on the separator 
    for j in i: # for each token in the split string 
     if len(j.strip())>0: # ignore empty string, like the spaces between elements 
      print j.strip() 

out.txt

Name 
Tom 
CODE 041 
Has 
Address 
NSYSTEMS c/o 
First Term 
123 
18 
Occ 
Engineer 
Level1 
JT 
18 

不過,我會打電話給你的價值觀" enclosed。我看不到任何, separated。你能擴展你的測試數據嗎?顯示一些具有分隔值的行,並展開我的代碼。

+1

這將失敗的「代碼041」 – 2010-06-22 10:02:04

+0

我剛剛意識到,但由於使用CSV閱讀器是一個更好的方法,我沒有更新的問題。但在這裏留下破碎的代碼是不好的,所以現在就更新它。 – Mizipzor 2010-06-22 10:08:39

0

使用CSV模塊,它會處理所有類型的分隔符和引號的正確,採用分體式等編寫這樣的代碼是不平凡的

import csv 
import StringIO 

data = '''"Name" "Tom" "CODE 041" "Has" 
"Address" "NSYSTEMS c/o" "First Term" "123" 18 
"Occ" "Engineer" "Level1" "JT" 18" 
''' 

reader = csv.reader(StringIO.StringIO(data), delimiter=' ') 
for row in reader: 
    print row 

輸出:

['Name', 'Tom', 'CODE 041', 'Has'] 
['Address', 'NSYSTEMS c/o', 'First Term', '123', '18'] 
['Occ', 'Engineer', 'Level1', 'JT', '18'] 
+0

我得到的輸出爲 '[''''''','''','','',''',''','''''','真實','數字','是','代表'獨特','點','上','','數','線','和','相反','每','點','上',''','號碼'''''',''表示','a','唯一','真實','數字'。\ t \ t \ t \ t \ t']'........... .......... – Hulk 2010-06-22 10:13:25

+2

@Hulk:如果你沒有提供正確的例子,我們不能寫出正確的代碼。現在看起來好像記錄是製表符分隔的,而不是空格或逗號。 – 2010-06-22 10:53:14