如何在不改变格式的情况下从txt文件中移除标点符号
我有一个包含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
1 个回答
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])