删除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中的数字开头的所有行的主要内容,如果未能解决你的问题,请参考以下文章