如何在不改变格式的情况下从txt文件中移除标点符号

1 投票
1 回答
1077 浏览
提问于 2025-04-17 20:44

我有一个包含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])

撰写回答