3

我想要做的是读入一个 csv 文档并在 SN 列 > 20 中找到所有值,然后创建一个新文件,其中只有 SN > 20 的行。

我知道我需要这样做:

  1. 阅读原始文件
  2. 打开一个新文件
  3. 迭代原始文件的行

我能够做的是找到 SN > 20 的行

import csv
import os

os.chdir("C:\Users\Robert\Documents\qwe")

with open("gdweights_feh_robert_cmr.csv",'rb') as f:
    reader = csv.reader(f, delimiter= ',')
    zerovar = 0
    for row in reader:
        if zerovar==0:
            zerovar = zerovar + 1
        else:
            sn = row [11]
            zerovar = zerovar + 1
            x = float(sn)
            if x > 20:
                print x

所以我的问题是如何获取 SN > 20 的行并将其转换为新文件?

4

2 回答 2

3

将数据保存在列表中,然后将列表写入文件。

import csv
import os

os.chdir(r"C:\Users\Robert\Documents\qwe")

output_ary = []
with open("gdweights_feh_robert_cmr.csv",'rb') as f:
    reader = csv.reader(f, delimiter= ',')
    zerovar = 0
    for row in reader:
        if zerovar==0:
            zerovar = zerovar + 1
        else:
            sn = row [11]
            zerovar = zerovar + 1
            x = float(sn)
            if x > 20:
                print x
                output_ary.append(row)

with open("output.csv",'w') as f2:
    for row in output_ary:
        for item in row:
            f2.write(item + ",")
于 2013-04-09T01:09:00.383 回答
0

在代码中,行的读取/循环非常复杂。它可以通过以下方式清理(并在 Python 中运行得更快):

with open('gdweights_feh_robert_cmr.csv', 'rb') as f:
    output_ary = [row for row in f if float(row[11]) > 20]

使用列表推导([row for row if f])在 python 中进行了优化,因此它将更有效地执行。并且...您避免创建reader数组,这将减少所需的内存,如果 csv 文件很大,也非常方便。

然后,您可以按照其他答案中的建议继续写出 outout_ary。

希望这可以帮助!

于 2013-04-09T01:17:13.937 回答