0

我是 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

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

4

2 回答 2

1

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

于 2012-05-09T21:28:14.857 回答
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:]))
于 2012-05-09T22:14:25.753 回答