满足您的需求
.
您的代码:
flist = open('files.txt')
filenum = 0
for filename in flist:
filenum = filenum + 1
filenamey = filename.strip()
filedata = open(filenamey)
for fline in filedata:
wordnum = 0
wlist = open('words.txt')
for word in wlist:
wordnum = wordnum + 1
sword = word.strip()
if sword in fline:
s = repr(filenum) + ' => ' + repr(wordnum)
print s
您打开 'files.txt' 但不要关闭它。
with open('files.txt') as flist: 更可取,因为它的文本更清晰,并且可以单独关闭。
用enumerate()代替filenum = filenum + 1
从现在开始,你一定不要忘记enumerate(),因为它是一个非常有用的功能。它的工作速度也非常非常快。
fline 对于线的迭代器来说不是一个好名字,IMO; line不是很好吗?
指令wlist = open('words.txt') 不是一个好地方:它不仅针对每个打开的文件执行,甚至在每次分析一行时执行。
此外,每次wlist迭代时,即在每一行都执行对wlist中列出的名称的处理。您必须将此处理排除在所有迭代之外。
wordnum就是wlist中word的索引。您可以再次使用 enumerate() 或简单地使用索引 i 循环并使用 wlist[i] 而不是 word
每次wlist的剑在排队,你就这样做
print repr(filenum) + ' => ' + repr(wordnum)
最好使用print repr(filenum) + ' => ' + repr(all_wordnum),其中all_wordnum 是一行中所有剑的列表
您将单词列表保存在文件中。你最好序列化这个词的列表。查看模块 pickle 和 pickle
在结果记录方面也有一些需要改进的地方。因为执行指令
print repr(filenum) + ' => ' + repr(wordnum)
每次都不是一个好习惯。如果你想记录在一个文件中也是一样的:你不能重复命令write()更好的是将所有结果列出在一个列表中,并在处理结束时打印或记录,使"\n".join(list)或类似的东西