如何重新排序包含浮点数、整数和文本数据的CSV文件列?
我想对一个csv文件做类似的处理,具体内容可以参考这个问题,但是我遇到了一个错误提示:
TypeError: list indices must be integers
我想重新排列的csv文件里面有浮点数、文本和整数等不同类型的数据。我猜这可能是问题所在,但我不知道怎么修改下面的代码来插入这些数据。不过,它确实能把头部信息写入新的CSV文件。
我使用的是John Machin建议的相同代码,但我的写入名称变量使用的是:
writenames = "ID,average,max,min,median,mode,stddev,skewness,kurtosis".split(",")
reader = csv.reader(open("/home/usrs/chris/Summary.csv", "rb"))
writer = csv.writer(open("/home/usrs/chris/SummaryNEW.csv", "wb"))
readnames = reader.next()
names2indicies = dict((name,index) for index, name in enumerate(readnames))
writeindices = [names2string[name] for name in writenames]
reorderfunct = operator.itemgetter(writeindices)
writer.writerow(writenames)
for row in reader:
writer.writerow(reorderfunct(row))
1 个回答
2
你只需要用到 operator.itemgetter() 这个函数:
inp=csv.reader(open(...))
outp=csv.writer(open(...))
map(outp.writerow,map(operator.itemgetter(x,y,z),inp))
这里的 x, y, z 是你想要重新排列的列。
不过,由于 Summary.csv 的第一行是表头,所以你可能会考虑使用 DictReader 和 DictWriter:
writenames = "ID,average,max,min,median,mode,stddev,skewness,kurtosis".split(",")
reader = csv.DictReader(open("/home/usrs/chris/Summary.csv", "rb"))
writer = csv.DictWriter(open("/home/usrs/chris/SummaryNEW.csv", "wb"), \
fieldnames=writenames)
reorderfunct = lambda r: dict([(col, r[col]) for col in writenames])
writer.writeheader()
for row in reader:
writer.writerow(reorderfunct(row))