2013-06-30 59 views
1

我試圖提取字典值的列表,與下面的代碼文件:寫作CSV文件:不需要逗號出現

import csv 

def function(file, output, deli = ','): 

    dictionary = dict() 
    with open(file, 'r') as source, open(output, 'w') as outp: 
     data = csv.reader(source) 
     line0 = next(data) 
     i = 0 
     for element in line0: 
      dictionary[i] = element 
      i += 1 
     my_writer = csv.writer(outp) 
     for element in dictionary.values(): 
      print(element) 
      my_writer.writerow(element) 

if __name__ == '__main__': 
    from sys import argv 
    if len(argv) == 2: 
     function(argv[1]) 
    elif len(argv) == 3: 
     function(argv[1], argv[2]) 
    elif len(argv) == 4: 
     function(argv[1], argv[2], argv[3]) 

    print("ok") 

要在shell中運行這段代碼,我用命令: 蟒蛇function.py輸入輸出

然而,試圖像一個CSV文件: α,β,γ,δ

我得到以下結果:

a,l,p,h,a 

,b,e,t,a 

,g,a,m,m,a 

,d,e,l,t,a 

我試圖將分隔符更改爲'',並且使用空格而不是逗號獲得了相同的結果。

我錯過了什麼嗎?

+0

你得到的輸出與你所期望的輸出有什麼不同? – John

+0

我期待有: alpha, beta, gamma, delta – bigTree

+0

@bigTree你試圖用'dict'做什麼? –

回答

1

的問題是在線路

for element in dictionary.values(): 
    print(element) 
    my_writer.writerow(element) 

docs參數writerow應該對象的列表。在你的情況下,參數是一個字符串(這是可迭代的)。 所以你實際上在做什麼是my_writer.writerow("alpha")這是寫作a,l,p,h,a

你應該簡單地做

my_writer.writerow(element.values()) 

另外,您得到領先的逗號怎麼一回事,因爲你的CSV字符串alpha, beta, gamma。所以當發生拆分時,元素是['aplha',' beta',' gamma',]。你可以使用strip()來刪除它們

+0

這就是它!我試着用列表的代碼作爲輸入到編寫器,它的工作原理。 – bigTree

+0

感謝您的幫助! – bigTree

0

你循環遍歷行的字符,而不是實際元素

with open(file_, 'r') as source, open(output, 'w') as outp: 
    data = csv.reader(source, delimiter=deli) 
    #line0 = next(data) 
    i = 0 
    for element in data: 
     dictionary[i] = element 
     i += 1 

也是它被認爲是好的做法,不會覆蓋內建在這種情況下,你要重寫fileinstead PEP 008 recommends that you add an underscore to the end of you variable name

+0

我實際上檢索了下一個(數據)文件的第一行(我正在處理的csv文件非常龐大,我只需要第一行) – bigTree