从csv文件中删除python中的某些字符

从csv文件中删除python中的某些字符,python,csv,Python,Csv,我有一个关于印尼配方的数据集,有3列(第一列是配方名称,第二列是配料,第三列是步骤) 在第二列和第三列中,有一些特殊字符,如“#”和“/”,如何删除它们?我遵循了,但它显示出一些错误。是数据集 这是我的代码: import csv input = open('dataset-ayam-baru.csv', 'rb') lines = csv.reader(input) output = open('new_dataset.csv', 'wb') writer = csv.writer(outp

我有一个关于印尼配方的数据集,有3列(第一列是配方名称,第二列是配料,第三列是步骤)

在第二列和第三列中,有一些特殊字符,如
“#”
“/”
,如何删除它们?我遵循了,但它显示出一些错误。是数据集

这是我的代码:

import csv

input = open('dataset-ayam-baru.csv', 'rb')
lines = csv.reader(input)
output = open('new_dataset.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()
我得到以下错误:

TypeError Traceback(最近一次调用)in()10 newtext=''11 for c in text:-->12 newtext+=''如果c in conversion,则为c 13 writer.writerow(c)14

TypeError:'in'需要字符串作为左操作数,而不是int


错误是由于您正在以字节形式加载文件。打开文件时,需要将“rt”替换为“wb”

从你提到的stackoverflow问题中,我的有效答案是:

import csv

with open("dataset-ayam-baru.csv", "rt", encoding="utf-8") as infile, open("new_dataset.csv", "w") 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)
重要提示:输入文件的编码!我必须将其转换为ANSI以使其工作,因为您需要提前知道数据集的编码(即utf-8)


接下来的问题(关于字节和编码的问题)就在这里:

我在这里找到了删除特殊字符的地方,以防有人需要它

def give_emoji_free_text(text):
    allchars = [str for str in text]
    emoji_list = [c for c in allchars if c in emoji.UNICODE_EMOJI]
    clean_text = ' '.join([str for str in text.split() if not any(i in str for i in emoji_list)])
   return clean_text

    for i in range(len(data['Title'])):
        data['Ingredients'][i] =  give_emoji_free_text(data['Ingredients'].get_value(i))
        data['Title'][i] =  give_emoji_free_text(data['Title'].get_value(i))
        data['Steps'][i] =  give_emoji_free_text(data['Steps'].get_value(i))

谢谢。

你能把错误日志发到这里吗?这里是错误:TypeError Traceback(最近一次调用)in()10 newtext=''11 for c in text:-->12 newtext+=''如果c in conversion,其他c 13 writer.writerow(c)14 TypeError:'in'需要字符串作为左操作数,不是INT请添加您使用的代码我已经编辑了我使用的代码还有什么解决方案吗?嗨,谢谢您的解决方案,但我遇到了新的错误:charmap编解码器无法解码3291位置的字节0x9d:字符映射到,这有什么可能?您好,这取决于原始csv的编码。必须事先知道文件的编码,不能推断。我编辑了答案,将参数“encoding”添加到open()函数中。如果不知道文件的编码,则必须将其转换为已知编码。