我是编程新手。我希望能够为我的列表中的两个条目运行此程序,但是不能理解编程以使其正确。这个网站的成员已帮助我做到这一点,该程序适用于一组标签。我想让它运行所以我可以一次搜索多个作者。输出结果是它只收集“Shakes”的所有信息。然后停下来。我只是不知道如何格式化循环以使其正确。
以下是我正在使用的代码:
authorList = ['Shakes.','Scott']
with open('/Users/Adam/Desktop/Poetrylist.txt','w') as output_file:
with open('/Users/Adam/Desktop/2e.txt','r') as open_file:
the_whole_file = open_file.read()
start_position = 0
for x in authorList:
while True:
start_position = the_whole_file.find('<A>'+x+'</A>', start_position)
if start_position < 0:
break
end_position = the_whole_file.find('</W>', start_position)
output_file.write(the_whole_file[start_position:end_position+4])
output_file.write("\n")
start_position = end_position + 4
我确信这是一个非常简单的问题,但我正在尝试自学python,而且进展相当缓慢。
答案 0 :(得分:5)
我认为这是因为您没有重置start_position
; Python中的变量的范围限定在它们的封闭函数或类或模块中,但不限于它们的封闭循环。所以尝试添加这一行:
for x in authorList:
start_position = 0 # Add this
while True:
答案 1 :(得分:2)
这将是一个问题
start_position = 0
for x in authorList:
while True:
对于第一作者,start_position
为0.酷。
对于第二作者,start_position
会是什么?暗示。没有什么能把它重置为零。
答案 2 :(得分:1)
这一次处理输入文件:
#!/usr/bin/env python
authorList = ['Shakes.','Scott']
with open('/Users/Adam/Desktop/2e.txt','r') as open_file:
the_whole_file = open_file.read()
start_position = 0
for x in authorList:
while True:
start_position = the_whole_file.find('<A>')
if start_position < 0:
break
author_end = the_whole_file.find('</A>', start_position)
end_position = the_whole_file.find('</W>', start_position)
if the_whole_file[start+position + 3:author_end] in authorList:
output_file.write(the_whole_file[start_position:end_position+4])
output_file.write("\n")
start_position = end_position + 4
它通过扫描作者标签来反转循环,查看它们的值是否在作者列表中,如果是,则打印到结束标记。由于必须访问每个标记,这可能会或者可能不会比循环每个作者更有效。