这是我的第一篇文章,所以如果我做错了什么,我很抱歉。也就是说,我搜索了这个问题,发现了一些类似的问题,由于 OP 没有提供足够的信息而从未得到回答。这也是作业,所以我只是在寻找提示。我真的很想自己得到这个。
我需要读入一个辩论文件 (.txt),然后提取并存储一位候选人说要放入词云的所有行。文件格式应该有帮助,但我不知道如何做到这一点。提示是每次新人说话时,他们的名字后跟一个冒号是第一行中的第一个单词。但是,候选人的数据可以跨越多行。我应该分别存储每个人的线路。这是该文件的示例:
到目前为止,这是我对一个函数所拥有的:
def getCandidate(myFile):
file = open(myFile, "r")
obama = []
romney = []
lehrer = []
file = file.readlines()
我只是不确定如何遍历数据以正确区分每个人的单词。我创建了一个虚拟文件来创建词云,我能够很好地做到这一点,所以我想知道的是如何提取我需要的信息。
谢谢!如果我可以提供更多信息,请告诉我。这是一门 Python 入门类(class)。
编辑:从响应中添加的新代码。这在一定程度上有效,但只抓取了每个候选人回答的第一行,而不是他们的整个回答。我需要编写代码来继续存储该候选下的每一行,直到新名称位于行的开头。
def getCandidate(myFile, candidate):
file = open(myFile, "r")
OBAMA = []
ROMNEY = []
LEHRER = []
file = file.readlines()
for line in file:
if line.startswith("OBAMA:"):
OBAMA.append(line)
if line.startswith("ROMNEY:"):
ROMNEY.append(line)
if line.startswith("LEHRER:"):
LEHRER.append(line)
if candidate == "OBAMA":
return OBAMA
if candidate == "ROMNEY":
return ROMNEY
编辑:我现在有一个新问题。我如何概括该文件,以便我可以打开两个人和一个主持人之间的任何辩论文件?我在这方面遇到了很多麻烦。
我得到了一个提示,可以查看该行的开头并查看每行的最后一个单词是否以“:”结尾,但我仍然不确定如何执行此操作。我尝试在空格上拆分每一行,然后查看该行中的第一项,但就我所知。
最佳答案
提示是这样的:在你分割你的行之后,迭代它们并检查每个候选的字符串函数 startswith ,然后追加。
对文件的迭代非常简单:
for row in file:
do_something_with_row
编辑:
为了在找到新候选人之前一直放置这些行,您必须跟踪最后看到的候选人的变量,如果在行首找不到任何匹配项,则继续使用与以前相同的候选人。
if line.startswith('OBAMA'):
last_seen=OBAMA
OBAMA.append(line)
elif blah blah blah
else:
last_seen.append(line)
顺便说一下,我会改变函数的定义:与其取候选人的名字并只返回他的行,不如返回一个字典,以候选人的名字作为键,他们的行作为值,这样你就不会不需要多次解析文件。当您使用更大的文件时,这可能是一个救星。
关于Python 3 从辩论文件中提取候选词,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/13223971/