如何在python中查找csv文档中的特定行

时间:2013-04-09 01:03:33

标签: python csv python-2.7

我要做的是读入csv文档并找到SN列中的所有值> 20,并创建一个只包含SN>行的新文件20.

我知道我需要这样做:

  1. 阅读原始文件
  2. 打开新文件
  3. 迭代原始文件的行
  4. 我能够做的是找到值为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并将其转换为新文件?

2 个答案:

答案 0 :(得分: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 + ",")

答案 1 :(得分:0)

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

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

使用列表理解([行为f])在python中进行了优化,因此它将更有效地执行。 AND ...你不必创建reader数组,这将减少所需的内存,如果csv文件很大,也非常方便。

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

希望这有帮助!

相关问题