我会处理这个问题的常用方法是使用正则表达式来抓取每行中的字段,然后每行将一行或两行转换为所需的格式。这并非万无一失 - 例如,如果某行有一个拼写错误的月份,那么它就会崩溃,但对于大多数即席任务来说,这足够了。
#!/usr/bin/env python2.7
import re
data = [u'$760,507,625 (USA) (18 November 2010)',
u'$760,505,847 (USA) (14 November 2010)',
u'$760,462,559 (USA) (7 November 2010)',
u'$760,410,799 (USA) (31 October 2010)',
'blah']
RE_DATA = re.compile(r'^\$([0-9,]+) \(([A-Z]+)\) \(([0-9]+) ([A-Za-z]+) ([0-9]+)\)$')
MONTHS = {
'January': 1,
'February': 2,
'March': 3,
'April': 4,
'May': 5,
'June': 6,
'July': 7,
'August': 8,
'September': 9,
'October': 10,
'November': 11,
'December': 12
}
for entry in data:
match = RE_DATA.match(entry)
if match is None:
print 'Error! %r did not match pattern' % entry
continue
amount, country, day, month, year = match.groups()
amount = int(amount.replace(',', ''))
country = str(country)
day = int(day)
month = MONTHS[month]
year = int(year)
print [amount, month, day, year, country]
打印:
[760507625, 11, 18, 2010, 'USA']
[760505847, 11, 14, 2010, 'USA']
[760462559, 11, 7, 2010, 'USA']
[760410799, 10, 31, 2010, 'USA']
Error! 'blah' did not match pattern
它总是重要的是要告诉人们[你已经试过(http://whathaveyoutried.com/),包括任何片段失败的尝试,使他们能够了解什么途径你错过了。这很重要,因为它激励人们回答问题,这很重要,因为它可以让问题更容易提供高质量的相关答案。就目前的问题来看,这尚未实现。如果您编辑问题,可能会阻止问题被关闭,您获得的答案的数量,质量和清晰度也会提高。 – Veedrac 2014-09-21 04:23:06
是的。你是对的。我是Python的新手。所以我不知道这次要尝试什么 – Zizhao 2014-09-21 16:53:21