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

时间:2014-03-04 09:40:41

标签: python csv

我有一个包含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 个答案:

答案 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])