write CSV columns out in a different order in Python

前端 未结 4 1748
猫巷女王i
猫巷女王i 2020-12-10 07:10

I realize this is very similar to this question. However, I have a CSV file that always comes in the same format that I need to write out with columns in a different order

相关标签:
4条回答
  • 2020-12-10 07:30

    Given your input as src.csv:

    import csv
    
    with open('x.csv','rb') as i:
        with open('y.csv','wb') as o:
            r = csv.DictReader(i)
            w = csv.DictWriter(o,'test QC Plate Sample'.split(),extrasaction='ignore')
            w.writeheader()
            for a in r:
                w.writerow(a)
    

    Output

    test,QC,Plate,Sample
    deep,passed,P342,A1
    deep,passed,P352,C3
    
    0 讨论(0)
  • 2020-12-10 07:34
    reorderfunc = operator.itemgetter(4, 5, 2, 3)
    
     ...
    
    newrow = reorderfunc(oldrow)
     ...
    
    0 讨论(0)
  • 2020-12-10 07:37

    If there's the slightest chance that the input file or the output file won't have the same layout each time, here's a more general way to get your "reorderfunc":

    writenames = "test,QC,Plate,Sample".split(",") # example
    reader = csv.reader(input_file_handle)
    writer = csv.writer(output_file_handle)
    # don't forget to open both files in binary mode (2.x)
    # or with `newline=''` (3.x)
    readnames = reader.next()
    name2index = dict((name, index) for index, name in enumerate(readnames))
    writeindices = [name2index[name] for name in writenames]
    reorderfunc = operator.itemgetter(*writeindices)
    writer.writerow(writenames)
    for row in reader:
        writer.writerow(reorderfunc(row))
    
    0 讨论(0)
  • #Use CSV library
    import csv
    media = {}
    files=['Online.txt']
    directory = "C:/directory/"
    rowCnt=0
    
    for file in files:
    
        file=directory+file
    
        with open(file, 'rb') as f:
            reader = csv.reader(f, delimiter='|') #use pipe delimiter
    
            for row in reader:
                rowCnt+=1
                if (rowCnt % 1000) == 0:
                    print ('"%s","%s","%s","%s","%s","%s","%s","%s","%s"')% (row[1],row[4],row[14],row[17],row[18],row[24],row[25],row[28],row[30])
    
    0 讨论(0)
提交回复
热议问题