2013-12-18 43 views
1

我想通過將一些變量合併到一箇舊文件並將它們附加到一個新的csv文件來創建一個乾淨的csv文件。在python中添加一個新列的CSV文件

我第一次運行數據沒有問題。我得到我想要的輸出,但是每當我嘗試用新變量追加數據(即新列)時,它都會將變量追加到底部,並且輸出不可靠。

我已經基本運行每個變量的相同的代碼,除改變 groupvariables變量到我所需的變量,然後用F2 =開放(「outputfile.csv」,「AB」)< ---但一個修改的ab。任何幫助,將不勝感激

groupvariables=['x','y'] 

f2 = open('outputfile.csv', "wb") 
writer = csv.writer(f2, delimiter=",") 
writer.writerow(("ID","Diagnosis")) 

for line in csv_f: 
    line = line.rstrip('\n') 
    columns = line.split(",") 
    tempname = columns[0] 
    tempindvar = columns[1:] 

templist = [] 

for j in groupvariables: 
    tempvar=tempindvar[headers.index(j)] 
    if tempvar != ".": 
     templist.append(tempvar) 

newList = list(set(templist)) 

if len(newList) > 1: 
    output = 'nomatch' 
elif len(newList) == 0: 
    output = "." 
else: 
    output = newList[0] 

tempoutrow = (tempname,output) 
writer.writerow(tempoutrow) 

f2.close()

+0

不是一個真正的答案,但如果你希望做什麼用的表格數據,包括分組和CSV序列化到/考慮尋找到像[熊貓]庫顯著(HTTP://pandas.pydata .org /) – Iguananaut

+0

謝謝我會在那裏看看。 – user3008983

+0

從代碼中你不清楚你提供了什麼你想要完成的事情(因爲它不符合你的描述)。請提供[SSCCE](http://sscce.org/)樣本數據。 – martineau

回答

2

CSV是基於行的文件格式,因此將列添加到現有的CSV文件的唯一方法是將其讀入內存,並將其全部覆蓋,將新列添加到每一行。

如果你想要做的只是添加,但是,追加將工作正常。

+2

好吧,將它全部讀入內存是一種方法。另一個是寫入一個臨時文件,然後寫入os.rename()。 – dstromberg

+1

我用@dstromberg方法多次解決了這個問題。批量讀取文件A中的每一行,在內存中轉換並追加到文件B.這會將內存保留在批處理窗口中的行數中。 – deepelement

0

以下是可能有所幫助的事情。我認爲每個csv文件中每行的第一個字段是記錄的主鍵,可用於匹配這兩個文件之間的行。下面的代碼從一個文件中讀取記錄,將它們存儲在字典中,然後從另一個文件中讀入記錄,將這些值附加到字典中,並寫出一個新文件。您可以調整此示例以更好地適應您的實際問題。

import csv 
# using python3 

db = {} 
reader = csv.reader(open('t1.csv', 'r')) 
for row in reader: 
    key, *values = row 
    db[key] = ','.join(values) 

reader = csv.reader(open('t2.csv', 'r')) 
for row in reader: 
    key, *values = row 
    if key in db: 
     db[key] = db[key] + ',' + ','.join(values) 
    else: 
     db[key] = ','.join(values) 

writer = open('combo.csv', 'w') 
for key in sorted(db.keys()): 
    writer.write(key + ',' + db[key] + '\n') 
相關問題