删除CSV文件中不以python中的数字开头的所有行

问题描述 投票:0回答:2

我想从CSV文件中删除所有不以数字开头的行。据我所知,我可以通过创建一个新的CSV文件来实现这一点,我需要将所需的行从输入复制到输出文件,但是当我执行我的代码时,输​​出文件将每个字符与我的默认分隔符分开。 case是,,它在输出文件中使用,在每个字符后创建行。那是我的代码:

import os, sys, csv

input_dir = "/home/test/input/"

for csv_in in os.listdir(input_dir):
    if csv_in.lower().endswith('.csv') and not csv_in.lower().startswith('fixed_'):
        csv_infile = input_dir + csv_in
        csv_out = input_dir + "fixed_" + csv_in
        with open(csv_infile) as f, open(csv_out, 'wb') as f_out:
            reader = csv.reader(f)
            writer = csv.writer(f_out)
            for row in f:
                if row.startswith(tuple('0123456789')):
                    writer.writerow(row)
python csv copy
2个回答
2
投票

尝试使用file.write

例如:

import os

input_dir = "/home/test/input/"

for csv_in in os.listdir(input_dir):
    if csv_in.endswith('.csv') and not csv_in.lower().startswith('fixed_'):
        csv_infile = os.path.join(input_dir, csv_in)
        csv_out = os.path.join(input_dir, "fixed_" + csv_in)
        with open(csv_infile) as f, open(csv_out, 'wb') as f_out:
            for row in f:
                if row.startswith(tuple('0123456789')):
                    f_out.write(row)

0
投票

如果不共享相同的区域设置,则很难调试CSV行为。添加一些调试输出清楚地表明您应该使用'reader'迭代器。在这种情况下,行包含逗号分隔值的列表。然后,您必须将startswith应用于列表的第一项。

import os, sys, csv

input_dir = "/home/lc253481/src/python/"

for csv_in in os.listdir(input_dir):
    if csv_in.lower().endswith('.csv') and not csv_in.lower().startswith('fixed_'):
        csv_infile = input_dir + csv_in
        csv_out = input_dir + "fixed_" + csv_in
        with open(csv_infile, 'r') as f, open(csv_out, 'wb') as f_out:
            reader = csv.reader(f, delimiter=',')
            writer = csv.writer(f_out, delimiter=',')
            for row in reader:
                print row
                print len(row)
                if row[0].startswith(tuple('0123456789')):
                    writer.writerow(row)
© www.soinside.com 2019 - 2024. All rights reserved.