读取CSV文件并在没有特定行Python的情况下重写它们

时间:2013-08-08 23:21:16

标签: python csv if-statement for-loop

我是编程新手。我在一个文件夹中有数百个CSV文件,某些文件在第二列中有字母DIF。我想重写没有这些行的CSV文件。我试图为一个文件做这个,并把我的尝试放在下面。我还需要帮助让程序为我目录中的所有文件执行此操作。任何帮助,将不胜感激。

谢谢

import csv

reader=csv.reader(open("40_5.csv","r"))


for row in reader:
if row[1] == 'DIF':
    csv.writer(open('40_5N.csv', 'w')).writerow(row)

3 个答案:

答案 0 :(得分:1)

我对您的代码进行了一些更改:

import csv
import glob
import os

fns = glob.glob('*.csv')

for fn in fns:
    reader=csv.reader(open(fn,"rb"))


    with open (os.path.join('out', fn), 'wb') as f:
        w = csv.writer(f)
        for row in reader:
            if not 'DIF' in row:
                w.writerow(row)

glob命令生成当前目录中以.csv结尾的所有文件的列表。如果要将源目录作为程序的参数,请查看sys.argv或argparse(特别是后者对于命令行解析非常强大)。

在“w”模式下打开文件时也必须小心:这意味着截断文件,即在循环中,您将始终覆盖现有文件,最终只有一个csv行。

必须存在direcotry'out'或脚本将产生IOError。

链接: open sys.argv argparse glob

答案 1 :(得分:0)

Most sequence types support the in or not in operators,它比测量索引位置更容易用于测试值。

for row in reader:
    if not 'DIF' in row:
        csv.writer(open('40_5N.csv', 'w')).writerow(row)

答案 2 :(得分:0)

如果您愿意安装numpy,您还可以使用recfromcsv或更通用的genfromtxt(genfromtxt要求您指定逗号分隔符)将csv文件读入方便的numpy数组格式,并且您可以指定哪些行和要忽略的列。可在此处找到genfromtxt的文档:

http://docs.scipy.org/doc/numpy/user/basics.io.genfromtxt.html

这里是recfromcsv:http://nullege.com/codes/search/numpy.recfromcsv?fulldoc=1