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

时间:2018-11-20 11:30:54

标签: python csv

我有3列有关印度尼西亚食谱的数据集(第一列是食谱名称,第二列是成分,第三列是步骤)。

在第二和第三列中,有一些特殊字符,例如'#''/',如何删除它们?我关注了this,但显示出一些错误。 Here是数据集!

这是我的代码:

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 (most recent call last) <ipython-input-28-05d606ed80df> in <module>() 10 newtext = '' 11 for c in text: ---> 12 newtext += '' if c in conversion else c 13 writer.writerow(c) 14

     

TypeError: 'in <string>' requires string as left operand, not int

2 个答案:

答案 0 :(得分:1)

在这里我发现某个地方可以删除特殊字符,以防有人需要。

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))

谢谢。

答案 1 :(得分:0)

该错误是由于您将文件加载为字节而引起的。打开文件时,您需要放入“ 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)。

后续问题(有关字节和编码的问题)在这里:csv.Error: iterator should return strings, not bytes