【发布时间】:2016-08-24 22:08:33
【问题描述】:
所以我构建了一个函数,它将查看文件夹中的所有 xml 文件,并查找节点属性(扬声器名称)并写入 csv 文件中的一行。请注意,目前,它会将它们全部附加到同一个 csv 文件中,但我希望在弄清楚下一步后让它更改文件名。
我尝试做的下一步是从文本文件的列表中提供这些演讲者姓名(我也尝试过 csv 文件和字典列表),并将函数应用于其中的每一个单独的扬声器名称。
我正在使用一个函数来执行此操作,因为我认为一个 for 循环遍历另一个 for 循环中的一组项目,该循环遍历一组不同的项目是一种机会,我对此进行了初步测试,并没有证明这种担心是错的。
当我将此列表中的任何项目单独粘贴为函数中的参数时,它会起作用。当我通过我尝试过的任何方式访问后打印列表时,它有效,我似乎无法让两者交谈。
我尝试通过以下方式将该函数应用于每个项目,但它所做的只是打印出我给 except 语句的错误,并写在 csv 的标题列中(所以我知道它至少是在访问函数)
speaker_list = open("UAS_Speakers.csv","r").readlines()
for item in speaker_list:
look_for_speaker_in_files(item)
或
with open("speaking.txt","r") as f:
for x in f:
look_for_speaker_in_files(x)
为了它,我什至尝试将它作为字典列表打开,因为数据已经有大括号。没有变化。
speaker_list = open("speaking.py","r")
for x in speaker_list:
look_for_speaker_in_files(x)
我也模仿了我所做的一个脚本,该脚本从列表中获取 url 并对它们执行几个 urllib 函数,尝试了这个:
def main():
with open("speaking.py","r") as speaker_list:
for x in speaker_list:
look_for_speaker_in_files(x)
if __name__ == "__main__":
main()
我不确定问题是否是当我执行任何这些操作时,整个列表是否都被一次性输入到函数中,但如果函数本身出现问题,阻止它工作,它就在这里:
def look_for_speaker_in_files(speakerAttrib):
c = csv.writer(open("allspeakers.csv","w"))
c.writerow(["Name", "Filename", "Text"])
for cr_file in glob.iglob('parsed/*.xml'):
try:
tree = etree.parse(cr_file)
for node in tree.iter('speaking'):
if node.attrib == speakerAttrib:
c.writerow([node.attrib, cr_file, node.text])
else:
continue
except:
print "bad string " + cr_file
continue
对此的任何帮助将不胜感激,否则我只会被困在从 OpenRefine 手动整理出来或从数百个电子表格中复制和粘贴,想到这让我的眼球燃烧起来。
示例列表项:
{'name': 'Mr. BEGICH'}
{'name': 'The SPEAKER pro tempore (Mr. Miller of Florida)'}
{'name': 'The Acting CHAIR'}
{'name': 'Mr. McKINLEY'}
{'quote': 'true', 'speaker': 'recorder'}
{'name': 'Mr. WAXMAN'}
{'name': 'Mr. MORAN'}
{'name': 'Mr. McKEON'}
{'quote': 'true', 'speaker': 'The Acting CHAIR'}
{'name': 'Mr. RIGELL'}
{'name': 'Mr. SMITH of Washington'}
{'name': 'Mr. KILMER'}
{'name': 'Mr. LAMBORN'}
{'name': 'Mr. CLEAVER'}
{'name': 'Mr. MICA'}
{'name': 'Ms. SPEIER'}
{'name': 'Mrs. ELLMERS'}
示例文件位于此文件夹中: https://drive.google.com/folderview?id=0B7lGA34vOZItREhRbmF6Z3YtTnM&usp=sharing
【问题讨论】:
-
请向我们提供您在查询中列出的不同输入文件中的示例数据。
-
当然,刚刚添加,见上文。
-
主要问题是,您将 speakerAttrib 作为字符串传递并进行比较。我刚刚将其转换为字典变量。第二个是获取节点的属性作为一个列表,而不是一个 lxml 元素。
标签: python-2.7 for-loop user-defined-functions readfile readlines