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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了删除CSV文件中不以python中的数字开头的所有行相关的知识,希望对你有一定的参考价值。

我想从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)
答案

尝试使用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)
另一答案

如果不共享相同的区域设置,则很难调试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)

以上是关于删除CSV文件中不以python中的数字开头的所有行的主要内容,如果未能解决你的问题,请参考以下文章

如何删除所有不以某些字符开头的行?

sed 练习

文本处理工具sed

第三周

选择查询|选择不以数字开头的条目 - MySQL

FilterListView - 从列表中删除不以提供的前缀开头的项目