【问题标题】:write CSV columns out in a different order in Python在 Python 中以不同的顺序写出 CSV 列
【发布时间】:2011-05-24 23:00:44
【问题描述】:

我意识到这与question 非常相似。但是,我有一个 CSV 文件,它始终采用相同的格式,我需要以不同的顺序写出列,以将其移到数据处理管道中。如果我的 csv 文件包含这样的标题和数据:

Date,Individual,Plate,Sample,test,QC
03312011,Indiv098,P342,A1,deep,passed
03312011,Indiv113,P352,C3,deep,passed

我将如何写出一个与原始输入 csv 具有相同列但按以下顺序排列的 csv 文件:

test,QC,Plate,Sample
deep,passed,P342,A1
deep,passed,P352,C3

我最初的想法是做这样的事情:

f = open('test.csv')
lines = f.readlines()
for l in lines:
    h = l.split(",")
    a, b, c, d, e, f  = h
    for line in h:
        print e, f, c, d, 

【问题讨论】:

标签: python csv


【解决方案1】:

如果输入文件或输出文件每次都有不同的布局,那么这里有一个更通用的方法来获取“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))

【讨论】:

    【解决方案2】:
    reorderfunc = operator.itemgetter(4, 5, 2, 3)
    
     ...
    
    newrow = reorderfunc(oldrow)
     ...
    

    【讨论】:

      【解决方案3】:

      鉴于您的输入为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)
      

      输出

      test,QC,Plate,Sample
      deep,passed,P342,A1
      deep,passed,P352,C3
      

      【讨论】:

      • 最好的 python 工作 python 代码,现在由于摩尔定律而关心速度
      【解决方案4】:
      #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])
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2015-11-14
        • 2017-12-04
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-02-19
        相关资源
        最近更新 更多