2016-12-02 132 views
-3

我不知道這是爲什麼不工作:麻煩與Python CSV

reader = csv.reader("a,b,c", delimiter=",") 
for r in reader: 
    print r 

輸出:

['a'] 
['', ''] 
['b'] 
['', ''] 
['c'] 

我試着和無定界符。理想情況下,我希望我的分隔符是;但我不能連得這個簡單的例子來工作...

+2

你應該通過一個文件或類文件對象爲'csv.reader',而不是''a,b,c「'。 – user2357112

+0

你是什麼意思這個例子不工作? 'csv.reader(csvfile,dialect ='excel',** fmtparams)' – haifzhan

回答

1

你的csv.reader()的使用是不是所有的典型。通常,通過一個類似於對象的對象,而不是一個字符串。典型的應用是像這樣:

with open('some_file.csv', 'rb') as input_file: 
    reader = csv.reader(input_file) 
    for r in reader: 
     # do something with "r" 
     pass 

技術上,傳入的參數沒有成爲一個file。所有它必須是一個可迭代的字符串序列。所以,你的(相當奇怪)的例子可能給,如果你在列表中傳遞您所期望的結果,而不是一個字符串:

import csv 
reader = csv.reader(["a,b,c"], delimiter=",") 
for r in reader: 
    print r 

結果:

['a', 'b', 'c'] 
0

的CSV讀者需要像對象的文件,因此字符串"a,b,c"寫入等記載here(章13.1.1)的文件:

>>> import csv 
>>> with open('eggs.csv', 'rb') as csvfile: 
...  spamreader = csv.reader(csvfile, delimiter=' ', quotechar='|') 
...  for row in spamreader: 
...   print ', '.join(row) 
Spam, Spam, Spam, Spam, Spam, Baked Beans 
Spam, Lovely Spam, Wonderful Spam 

或使用StringIO