записывать столбцы CSV в другом порядке в Python - PullRequest
7 голосов
/ 25 мая 2011

Я понимаю, что это очень похоже на этот вопрос .Тем не менее, у меня есть файл 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, 

Ответы [ 4 ]

5 голосов
/ 25 мая 2011

Если есть малейшая вероятность того, что входной файл или выходной файл не будут каждый раз иметь один и тот же формат, вот более общий способ получить ваш "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))
5 голосов
/ 25 мая 2011
reorderfunc = operator.itemgetter(4, 5, 2, 3)

 ...

newrow = reorderfunc(oldrow)
 ...
4 голосов
/ 25 мая 2011

Учитывая ваш ввод как 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
0 голосов
/ 08 марта 2014
#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])
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...