在Python中使用split函数

时间:2011-12-14 01:24:18

标签: python csv

我正在使用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)]])

2 个答案:

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