我有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
答案 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