我有一个包含1000行和2列的csv文件。我想删除所有标点并将所有情况转换为该文件的小写,并希望输出文件具有相同的格式,如1000行和2列。 我正在运行以下代码:
import re
original_string = open('Suppliers0403.csv').read()
middle_string=original_string.lower()
new_string = re.sub('[^a-zA-Z0-9\n\.]+', ' ', middle_string)
open('sup.csv', 'w').write(new_string)
我收到输出但输出文件已分散。它作为一个专栏出现。 我有这样的文件:
id col1
1 a
2 ??
3 b"v"
4 "c"an
5 ?
输出结果如下:
idcol1
1a
2
3bv
4can
5
但我希望它像:
id col1
1 a
2
3 bv
4 can
5
答案 0 :(得分:5)
您有一个以制表符分隔的文件,正在替换标签;您需要将正则表达式调整为:
'[^a-z0-9\n\.\t]+'
(删除了A-Z
,因为您已经低位输入了输入)。
更健壮和通用的方法是使用csv
模块来保留格式:
input_filename = 'Suppliers0403.csv'
output_filename = 'sup.csv'
clean = re.compile(r'[^a-z0-9\.]+')
with open(input_filename, 'rb') as infh, open(output_filename, 'wb') as outfh:
dialect = csv.Sniffer().sniff(infh.read(1024))
infh.seek(0)
reader = csv.reader(infh, dialect)
writer = csv.writer(outfh, dialect)
for row in reader:
writer.writerow([clean.sub(' ', c.lower()) for c in row])