【发布时间】:2011-07-30 17:18:26
【问题描述】:
我正在使用 python 的 CSV 模块来遍历列的行。
我需要做的是:
- 获取“title”列的第一行
- 删除所有西班牙语字符(重音,Ñ)
- 删除单引号
- 最后,用破折号替换空格并将所有内容转换为小写。
我让它与一个简单的测试文件一起工作,而不是一个 csv。我还设法将每个标题打印在它自己的单独行中。
但现在我正在使用这段代码来检查 CSV 文件(对不起,非常丑陋的代码,我是新手程序员):
import csv
import unicodedata
import ast
def strip_accents(s):
return ''.join((c for c in unicodedata.normalize('NFD', s) if unicodedata.category(c) != 'Mn'))
dic_read = csv.DictReader(open("output.csv", encoding = "utf8"))
for line in dic_read:
#print(line) #I get each line of the csv file as a dictionary.
#print(line["title"]) # I get only the "title" column on each line
line = line.replace(' ', '-').lower()
line = line.replace("´", "")
line = strip_accents(line)
fp=open("cleantitles.txt", "a")
fp.write(line)
fp.close()
我收到以下错误:
Traceback (most recent call last):
File "C:/csvreader3.py", line 15, in <module> line = strip_accents(line)
File "C:/csvreader3.py", line 7, in strip_accents
return ''.join((c for c in unicodedata.normalize('NFD', s) if unicodedata.category(c) != 'Mn'))
TypeError: must be str, not dict
当我尝试仅执行 .replace 时,我也会遇到类似的错误。我现在明白这些方法只适用于字符串。
我怎样才能让它工作?我四处寻找将 dict 转换为字符串对象的方法,但没有奏效。
此外,也欢迎任何对优化和使我的代码更具可读性的批评!
【问题讨论】:
-
你到底想在这里做什么?读入一个 csv 文件,将所有“标题”条目修改为您想要的格式,然后将修改后的标题列与同一行输出到一个新文件中?
-
没错。我实际上让我的脚本读取所有标题条目,但由于我找不到将这些作为字符串处理的方法,我不得不将所有标题条目输出到一个新的文本文件,然后将此文本文件处理到另一个新的,最终文本文件。效率不是很高,但我最终得到了结果。