似乎已经有一些关于这个主题的东西了(How to replace all those Special Characters with white spaces in python?),但是我不能用我的一生来完成这个简单的任务。
我有一个.CSV文件,有75列,将近4000行。我需要将所有“特殊字符”($#&;*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()
所有这些成功的做法都是将所有内容作为一列写入输出文件,生成超过65K行。此外,特殊的人物仍然存在!
很抱歉有多余的问题。 提前谢谢你!
除了@Nisan.H指出的bug和@dckrooney指出的有效点之外,在这种情况下,您可能不需要以特殊的方式处理该文件,因为它是一个CSV文件(但请参阅下面的注释):
writer.writerow()
应该有一个字符串序列,每个字符串都用逗号分隔(参见here)。在你的例子中,你是在写一个字符串。input
和lines
两种方式从“C:/Temp/Data.csv”中读取,但它实际上只从input
中读取(因此代码不将文件作为csv文件处理)。newtext
并写出该变量的每个版本。因此,newtext
的第一个版本将是1个字符长,第二个是2个字符长,第三个是3个字符长,等等最后,考虑到CSV文件可以中有引号,实际上可能有必要将输入文件作为CSV处理,以避免替换要保留的引号,例如保护CSV文件字段中存在逗号的引号。在这种情况下,需要单独处理CSV文件的每个字段,然后将每一行写入新的CSV文件。
这似乎不需要特别处理CSV(只要特殊字符不是列分隔符)。
我可以做些类似的事情
会变的
(注意,我有一个引用值)
现在,您的代码正在将整个文本读成一行:
从
_
字符开始:在
text
中的每个字符上循环:将更正的字符添加到
newtext
(非常慢):然后写下原始字符(?),作为列,添加到新的csv:
。。这不太可能是你想要的。:^)
相关问题 更多 >
编程相关推荐