我有一个包含以下格式的奥斯卡提名者的列表。
Birdman 2014 4 9
The Grand Budapest Hotel 2014 4 9
Whiplash 2014 3 5
我要做的是将它们分为不同的类别:Movie
,Year
,oscars
,nominations
。
我无法使用空白区域将它们分开,因为电影标题中有空格。关于我如何能做到这一点的任何想法。
答案 0 :(得分:2)
我会试试这个:
#I assume the data is in 'text' as a string.
data = text.split()
Movie, Year, oscars, nominations = ''.join(data[:-3]), data[-3], data[-2], data[-1]
因此,考虑到数据在列表中,可以在for循环中加载:
# list_of_lines is a list where each item is a line of data
whole_data = list()
for text in line_of_lines:
data = text.split()
whole_data.append({'title':''.join(data[:-3]), 'year': data[-3], 'oscars': data[-2], 'nominations': data[-1]})
# Do something with your info
答案 1 :(得分:0)
您可以尝试在python中使用字典。
http://www.tutorialspoint.com/python/python_dictionary.htm
dict_var = {'title': 'Birdman', 'releasedate': 2014};
访问它们:
dict_var['title'] == 'Birdman'
dict_var['releasedate'] == 2014
答案 2 :(得分:0)
您可以简单地将电影条目分成这四个字段:
str = "The Grand Budapest Hotel 2014 4 9 "
tmp = str.split()
[" ".join(tmp[0:len(tmp)-3])] + tmp[len(tmp)-3:len(tmp)]
答案 3 :(得分:0)
你能否利用包含模糊空间的唯一信息单位是标题?例如:
a = 'Birdman 2014 4 9'
b = 'The Grand Budapest Hotel 2014 4 9'
如果我们使用split
将其分解为单词:
>>> aa.split()
['Birdman', '2014', '4', '9']
>>> bb.split()
['The', 'Grand', 'Budapest', 'Hotel', '2014', '4', '9']
我们得到不同计数的列表(分别为4和7)。但我们知道nominations
将永远是最后一个而且只是最后一个字。 Python的反向索引在这里非常好。
>>> aa = a.split()
>>> bb = b.split()
>>> aa[-1]
'9'
>>> bb[-1]
'9'
我们也可以为oscars
和year
编制索引:
>>> aa[-2] # oscars
'4'
>>> bb[-2] # oscars
'4'
>>> aa[-3] # year
'2014'
>>> bb[-3] # year
'2014'
如果您需要将这些字词重新转换为数字,请使用int()
功能。要获得标题,我们可以使用相同的反向索引访问列表的一部分。
>>> aa[0:-3] # title
['Birdman']
>>> bb[0:-3] # title
['The', 'Grand', 'Budapest', 'Hotel']
请注意,[0:-3]
可以简单地写为[:-3]
,0是:
字符左侧表示的起始索引的默认值。
一个或多个单词的列表可能不是您想要表达标题的方式,因此要将它们重新转换为单个字符串,请使用join()
方法:
>>> awords = aa[:-3]
>>> aWords = aa[:-3]
>>> bWords = bb[:-3]
>>> ' '.join(aWords)
'Birdman'
>>> ' '.join(bWords)
'The Grand Budapest Hotel'
如果您要做很多事情,我会编写一个简单的解析器,将您的单行字符串转换为更结构化的字符串。让我们使用一个带有命名字段的简单对象:
class MovieRecord(object):
pass
(您也可以使用命名元组或字典,但我认为类总是很好,因为随着程序的增长,我可以将行为绑定到自然适合它的对象数据,另一个选项是一种更平坦,更静态的方法,往往会导致整个程序中没有很好地封装行为。)
现在我们需要一个函数来将单个文本行解析为MovieRecord。采取我们上面建立的:
def parseMovie(line):
newRecord = MovieRecord()
words = line.split()
newRecord.name = ' '.join(words[:-3])
newRecord.year = int(words[-3])
newRecord.oscars = int(words[-2])
newRecord.nominations = int(words[-1])
return newRecord
测试出来:
>>> sample = 'The Grand Budapest Hotel 2014 4 9'
>>> record = parseMovie(sample)
>>> record.name
'The Grand Budapest Hotel'
>>> record.year
2014
>>> record.oscars
4
>>> record.nominations
9
现在不多了。给定这些行的文件,我们可以利用python喜欢默认读取文件行的事实:
with open('yourListOfMovies', 'r') as file:
allMovies = [parseMovie(line) for line in file]