使用csv模块在python中提取字段

时间:2017-07-18 13:54:59

标签: python

我有一个很大的.csv文件和50列。第一个字段是" name"。最后两个字段都有正数和负数。我想查看最后两个字段并获取两个字段中的值均为负数的行。并创建一个新文件,其中有3个字段。第一个是名称,第二个和第三个字段有相应的值(都是负数)。这是一个输入和输出的例子。

输入:

ZNF449  -1.53   -0.45
CASKIN1 -1.58   -1.42
CAMK2B  0.31    0.23
RP11-644F5.11   -1.12   -0.94
DET1    -0.42   -0.44
NEK8    0.04    -0.4
CPM 1.26    1.16
CA11    0.16    0.08
DSE -0.06   0.12
GALM    -0.03   0.04
HSPA12A 0.22    0.14
CCDC82  0.33    0.76
AC025171.1  1.24    1.27
CARD14  -0.91   -0.79

输出:

ZNF449  -1.53   -0.45
CASKIN1 -1.58   -1.42
RP11-644F5.11   -1.12   -0.94
DET1    -0.42   -0.44
CARD14  -0.91   -0.79

我怎么能在python中做到这一点?

我试过这个,但没有回复我想要的东西。

import csv
with open('data.csv', 'r') as file, f = open('out.csv', 'w')
    dat = csv.reader(file, delimiter=',')
    for row in dat:
        if row[39] == row[40]:
    new = row[0] + row[39]
    f.write( new + "\n"  )

1 个答案:

答案 0 :(得分:0)

csv中只有3行。因此,只有row[0]row[1]row[2]存在并且可以访问。

您也没有正确使用上下文管理器。您需要以逗号分隔with ... as,如下所示。另外,对于out文件,最好使用csv writer。

此外,我还修改了一些名称,因此对于发生的事情它更具可读性。这是完整的清单:

import csv
with open('data.csv', 'r') as fin, open('out.csv', 'w') as fout:
    dat_in = csv.reader(fin, delimiter=',')
    dat_out = csv.writer(fout)
    for row in dat_in:
        i, j = map(float, row[1:]) # retrieves row[1] and row[2] and converts those column values to floats and assigns them to i and j

        if i < 0 and j < 0:
            dat_out.writerow([row[0], i, j])

很可能ij已经浮动了,但我对你的数据不是100%肯定,所以我正在转换并然后测试,只是为了安全起见。