【问题标题】:How to split up data from a column in a csv file into two separate output csv files?如何将 csv 文件中的列中的数据拆分为两个单独的输出 csv 文件?
【发布时间】:2013-08-25 09:50:43
【问题描述】:

我有一个 .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

我已经设置了输入和输出,但只是一个空的 for 循环,我被难住了:

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()

如果有任何帮助,我将不胜感激!

【问题讨论】:

  • CATEGORIES 字段的值是否总是长度为 2(两个字母)?
  • @user1844098 试试我的代码应该可以正常工作。

标签: python csv


【解决方案1】:
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()

【讨论】:

  • 这只是返回ID(第一)列的第一个和第二个字符?
  • 不,它会产生你想要的输出:record[-1] 返回最后一列
  • 不,我的意思是我运行了它,test_output1.csv 只是返回 ID 列的第一个数字,没有其他数据,而 test_output2.csv 返回 ID 列的第二个数字,没有其他数据数据。
  • 我使用了你的输入文件,它产生了想要的输出。重试并确保粘贴整个代码。
  • 啊,是的,抱歉,我正在使用一个与我描述的文件类似但不完全相同的 .csv 文件。你是对的,它确实适用于我描述的那个。我会做一些调整,让它与我正在使用的 .csv 文件一起工作。
【解决方案2】:
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

【讨论】:

    猜你喜欢
    • 2019-11-17
    • 1970-01-01
    • 2018-02-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-10-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多