我正在使用CSV模块,我正在编写一个简单的程序,它使用文件中列出的几个作者的名字,并以这种方式格式化它们:john.doe
到目前为止,我已经达到了我想要的结果,但是我无法获取代码来排除诸如“Mr.”Mrs“之类的标题,等等。我一直在考虑使用split函数,但我不确定这对它是否有用。
有什么建议吗?提前谢谢!
到目前为止,这是我的代码:
import csv
books = csv.reader(open("books.csv","rU"))
for row in books:
print '.'.join ([item.lower() for item in [row[index] for index in (1, 0)]])
答案 0 :(得分:3)
这取决于字符串的混乱程度,在最坏的情况下,这个基于正则表达式的解决方案应该可以完成这项工作:
import re
x=re.compile(r"^\s*(mr|mrs|ms|miss)[\.\s]+", flags=re.IGNORECASE)
x.sub("", text)
(我在这里使用re.compile()
因为某些原因Python 2.6 re.sub
不接受flags=
kwarg ..)
更新:我写了一些代码来测试它,虽然我无法找到自动化结果检查的方法,但看起来工作正常..这是测试代码:
import re
x=re.compile(r"^\s*(mr|mrs|ms|miss)[\.\s]+", flags=re.IGNORECASE)
names = ["".join([a,b,c,d]) for a in ['', ' ', ' ', '..', 'X'] for b in ['mr', 'Mr', 'miss', 'Miss', 'mrs', 'Mrs', 'ms', 'Ms'] for c in ['', '.', '. ', ' '] for d in ['Aaaaa', 'Aaaa Bbbb', 'Aaa Bbb Ccc', ' aa ']]
print "\n".join([" => ".join((n,x.sub('',n))) for n in names])
答案 1 :(得分:0)
根据您的数据的复杂性和您的需求范围,您可以通过使用replace()在迭代它们时从csv中的行中删除标题这些简单的东西。
有些事情:
titles = ["Mr.", "Mrs.", "Ms", "Dr"] #and so on
for line in lines:
line_data = line
for title in titles:
line_data = line_data.replace(title,"")
#your code for processing the line
这可能不是最有效的方法,但根据您的需要可能是一个很好的选择。
这对你发布的代码有什么用处(我猜是Mr.Mrs。是第1列的第一个名字):
import csv
books = csv.reader(open("books.csv","rU"))
for row in books:
first_name = row[1]
last_name = row[0]
for title in titles:
first_name = first_name.replace(title,"")
print '.'.(first_name, last_name)