如何在Python中创建由原始表的列子集组成的数据表

时间:2012-05-09 21:22:11

标签: python python-3.x

我是Python的初学者。我的数据表(Table1)有21列和数千行。它是如此巨大,我不能在我的笔记本电脑上打开它。看起来有点像这样:

ABCDEFG,HIJKLMNO,PQRSTUVW,TEYHDSJD ........

TRGFHFJ,GDGSANTO,JDKNVWWR,URNWHJX ........

.......

但是,我需要重现此表的一个子集,该子集仅包含第10-21列。我尝试过以下方法:

import sys
import csv

with open(sys.argv[1], "r") as input:
   readinput = csv.reader(input, delimiter=',')
   with open("output.csv", 'wt') as output:
      writer=csv.writer(output, delimiter="\t")
      for row in input:
         values =  [row[10],row[11],row[12],row[13],row[14],row[15],row[16],row[17],row[18],row[19],row[20],row[21]]
         writer.writerow([values])
         print (row[10])

但事实证明,cvs.reader的表达式“row [10]”并未将其解释为行的第10个元素(=第10列)。相反,它给了我第10个字母。所以输出不是Table1的第10到第21列,但它是第10到第21个字母,有点像这样:

K,L,M,N,O,“”,P,Q,R,S,T,U

S,A,N,T,O,“”,J,D,K,N,V,W

我做错了什么?谢谢你的帮助!

2 个答案:

答案 0 :(得分:1)

您正在使用for row in input,我猜您想要for row in readinput

答案 1 :(得分:0)

如果你有一个.csv文件,并且想要创建另一个.csv,使后一个文件只包含前一个文件的第10到21列,你可以这样做:

with open('old_file.csv') as old_f, open('new_file.csv', 'w') as new_f:
    for line in old_f:
        new_f.write(','.join(line.split(',')[10:]))