2013-08-25 54 views
-1

我有一個.csv文件,如:如何將csv文件中的列中的數據拆分爲兩個單獨的輸出csv文件?

ID NAME CATEGORIES 
1, x, AB 
2, xx, AA 
3, xxx, BA 

我將如何得到一個基於類別如此形成兩個輸出的.csv文件:

文件1:

ID NAME CATEGORY 
1, x, A 
2, xx, A 
3, xxx, B 

文件2:

ID NAME CATEGORY 
1, x, B 
2, xx, A 
3, xxx, A 

我有輸入和輸出設置,但只是一個空的LO op我被難倒的地方:

records = [line for line in csv.reader(open('test_input.csv', 'rt'), delimiter=',')] 
outfile = open('test_output1.csv', 'wt') 
outfileWriter = csv.writer(outfile, delimiter=',') 

for record in records: 
    #something! 
    outfileWriter.writerow(record) 

outfile.close() 

我很感激任何幫助!

+0

執行類別字段總是有長度爲2(兩個字母)的價值? – pkacprzak

+0

是的,總是兩個 – user1844098

+0

@ user1844098試試我的代碼應該可以正常工作。 –

回答

0
import csv 

records = [line for line in csv.reader(open('test_input.csv', 'rt'), delimiter=',')] 
outfile1 = open('test_output1.csv', 'wt') 
outfile2 = open('test_output2.csv', 'wt') 
outfileWriter1 = csv.writer(outfile1, delimiter=',') 
outfileWriter2 = csv.writer(outfile2, delimiter=',') 

# headers always the same 
outfileWriter1.writerow(records[0]) 
outfileWriter2.writerow(records[0]) 

for record in records[1:]: 
    cat = record[-1].strip() # get category in form "AB" 
    new_record = record 
    new_record[-1] = "\t%s" % cat[0] # set category for file 1 with tab as a prefix 
    outfileWriter1.writerow(new_record) 
    new_record[-1] = "\t%s" % cat[1] # set category for file 2 with tab as a prefix 
    outfileWriter2.writerow(new_record) 

outfile1.close() 
outfile2.close() 
+0

這只是返回來自ID(第一個)列的第一個和第二個字符? – user1844098

+0

不,它會產生你想要的輸出:記錄[-1]返回最後一列 – pkacprzak

+0

不,我是說我跑了它,而test_output1.csv只是返回來自ID列的第一個數字,沒有其他數據,和test_output2。 csv正在返回來自ID列的第二位數字,而沒有其他數據。 – user1844098

0
import csv 
with open('input.csv') as f, open('file1.csv', 'w') as f1, open('file2.csv', 'w') as f2: 
    header = next(f) #read header 
    reader = csv.reader(f, delimiter=',', skipinitialspace=True) 
    f1.write(header) #write header 
    f2.write(header) #write header 
    writ1 = csv.writer(f1, delimiter=',') 
    writ2 = csv.writer(f2, delimiter=',') 
    for row in reader: 
     c1, c2 = row[-1]   #split the category into c1 and c2 
     writ1.writerow(row[:-1] + [c1]) #write c1 to file1 
     writ2.writerow(row[:-1] + [c2]) #write c2 to file2 
相關問題