使用python从csv文件中删除特殊字符

Jen*_*nny 6 python csv python-2.7

似乎已经有一些关于这个主题的内容(如何在 python 中用空格替换所有这些特殊字符?),但我一生都无法弄清楚这个简单的任务。

我有一个包含 75 列和近 4000 行的 .CSV 文件。我需要用“_”替换所有“特殊字符”($ # & * ect)并写入一个新文件。这是我到目前为止所拥有的:

import csv

input = open('C:/Temp/Data.csv', 'rb')
lines = csv.reader(input)
output = open('C:/Temp/Data_out1.csv', 'wb')
writer = csv.writer(output)

conversion = '-"/.$'
text =  input.read()
newtext = '_'
for c in text:
    newtext += '_' if c in conversion else c
    writer.writerow(c)

input.close()
output.close()
Run Code Online (Sandbox Code Playgroud)

所有这些都成功地将所有内容作为单列写入输出文件,产生超过 65K 行。此外,特殊字符仍然存在!

对不起,多余的问题。先感谢您!

DSM*_*DSM 5

我可能会做类似的事情

import csv

with open("special.csv", "rb") as infile, open("repaired.csv", "wb") as outfile:
    reader = csv.reader(infile)
    writer = csv.writer(outfile)
    conversion = set('_"/.$')
    for row in reader:
        newrow = [''.join('_' if c in conversion else c for c in entry) for entry in row]
        writer.writerow(newrow)
Run Code Online (Sandbox Code Playgroud)

这变成了

$ cat special.csv
th$s,2.3/,will-be
fixed.,even.though,maybe
some,"shoul""dn't",be
Run Code Online (Sandbox Code Playgroud)

(请注意,我有一个引用值)到

$ cat repaired.csv 
th_s,2_3_,will-be
fixed_,even_though,maybe
some,shoul_dn't,be
Run Code Online (Sandbox Code Playgroud)

现在,您的代码正在将整个文本读入一大行:

text =  input.read()
Run Code Online (Sandbox Code Playgroud)

从一个角色开始_

newtext = '_'
Run Code Online (Sandbox Code Playgroud)

循环遍历 中的每个字符text

for c in text:
Run Code Online (Sandbox Code Playgroud)

将更正后的字符添加到newtext(非常慢):

    newtext += '_' if c in conversion else c
Run Code Online (Sandbox Code Playgroud)

然后将原始字符 (?) 作为一列写入新的 csv:

    writer.writerow(c)
Run Code Online (Sandbox Code Playgroud)

..这不太可能是你想要的。:^)