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

Python 读取CSV文件并在没有特定行的情况下重写它们,python,csv,if-statement,for-loop,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'

我是编程新手。我在一个文件夹中有数百个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)
,这比计算索引位置更容易用于测试值

for row in reader:
    if not 'DIF' in row:
        csv.writer(open('40_5N.csv', 'w')).writerow(row)
,这比计算索引位置更容易用于测试值

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

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

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

链接:
我对您的代码做了一些更改:

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

链接:

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


这里是recfromcsv:

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


下面是recfromcsv:

这个答案很接近,但有一个主要问题和几个次要问题。不要为每个输入行创建新的
编写器
!不太重要的是,使用
os.path.join
创建输出文件路径比使用硬编码的“/”分隔符更好。正如文档所指出的,输入和输出文件都应该以二进制模式打开(“rb”和“wb”分别)。我将添加您的建议。对于OP-如果您真的只想检查第二列中的'DIF',并且仍然在其他列中写入包含它的行,请替换第行中的
如果不是'DIF:
检查
如果行[1]!='DIF':
非常感谢您。通过一些小的修改,这个方法非常有效。这个答案很接近,但有一个主要问题和几个次要问题。不要为每个输入行创建新的
编写器
!不太重要的是,使用
os.path.join
创建输出文件路径比使用硬编码的“/”分隔符更好。正如文档所指出的,输入和输出文件都应该以二进制模式打开(“rb”和“wb”分别)。我将添加您的建议。对于OP-如果您真的只想检查第二列中的'DIF',并且仍然在其他列中写入包含它的行,请替换第行中的
如果不是'DIF:
检查
如果行[1]!='DIF':
非常感谢您。经过几次小的修改,这一切都很顺利。