对于我的编程作业,其中一个功能涉及从文本文件(推特数据)中获取输入并返回推文信息的元组(请参阅doctests以获取样本文件上的正确结果)。
示例文本文件:http://pastebin.com/z5ZkN3WH
功能的完整描述如下:
参数是文件的全名。打开参数指定的文件,该文件的格式如数据文件部分所述,并从中读取所有数据。字典的键应该是候选者的名称,并且与每个候选者相关联的列表中的项目是他们发送的推文。推文元组应该有表格(候选人,推文文本,日期,来源,最喜欢的计数,转推计数)。日期,收藏计数和转发计数应为整数,元组中的其余项应为字符串。
到目前为止我的代码如下:
def extract_data(metadata):
""" list of str -> tuple of str/int
Return extracted metadata in specified format.
"""
date = int(metadata[1])
source = metadata[3]
favs = int(metadata[4])
retweets = int(metadata[5])
return date, source, favs, retweets
def read_tweets(file):
""" (filename) -> dict of {str: list of tweet tuples}
Read tweets from file and categorize into dictionary.
>>> read_tweets('very_short_data.txt')
{'Donald Trump': [('Donald Trump', 'Join me live in Springfield, Ohio!\\nhttps://t (dot) co/LREA7WRmOx\\n', 1477604720, 'Twitter for iPhone', 5251, 1895)]}
"""
result = {}
with open(file) as data:
tweets = data.read().split('<<<EOT')
for i, tweet in enumerate(tweets):
line = tweet.splitlines()
content = ' '.join(line[2:])
meta = line[1].split(',')
if ':' in line[0]:
author = line[0]
metadata = extract_data(meta)
else:
metadata = extract_data(meta)
candidate = author
result[candidate] = [(candidate, content, metadata)]
return result
这当前导致错误:“date = int(metadata [1])IndexError:list index out of range”。我不知道为什么,或下一步做什么。任何帮助将不胜感激。
由于
答案 0 :(得分:0)
我不认为通过EOT分割是一个好主意,因为考虑空推文的候选人没有EOT。最好循环访问内容而不是一次读取所有数据。它使它变得更容易。
做同样的任务仍然坚持这个功能:(