python 第30讲中动动手最后一个我的代码实现有点问题,求大佬帮忙解决
import os
def print_answer(dict_key):
'''打印查找结果'''
keys = dict_key.keys()
keys = sorted(keys)
for each in keys:
print('关键字出现在第%s行,第%s个位置'%(each,dict_key))
def find_each_line_key(each_line,dict_key,line):
'''查找段落中的key'''
line_key = each_line.find(key)
position = []
while line_key != -1:
position.append(line_key+1)
line_key = each_line.find(key,line_key)
return position
def find_key(files):
'''打开文件并查找'''
txt = open(files)
line = 0
dict_key = dict()
for each_line in txt:
line+=1
position = find_each_line_key(each_line,dict_key,line)
dict_key = position
txt.close()
return dict_key
def open_file(list_txt,a,name,i):
'''打开文件'''
for files in list_txt:
dict_key = find_key(files)
#查找步骤
#打印结果
print('在文件【%s】中找到关键字【%s】'%(i,name))
print_answer(dict_key)
print('===============================================================')
def find_file(key):
'''查找txt文件'''
list_txt = []
a = os.walk(os.getcwd())
for i in a:
for name in i:
more = os.path.splitext(name)
if more == '.txt':
list_txt.append((i+'\\'+name))
open_file(list_txt,a,name,i)
key = input('请将该脚本放于待查找的文件夹内,请输入关键字:')
check = input('请问是否需要打印关键字【%s】在文件中的具体位置(YES/NO):' % key)
check.lower()
if check == 'yes':
find_file(key)
这是题目原文:
我的代码执行后提示错误显示内存溢出
但是实在不会怎么解决。。。困扰了我整整一天,跪求大佬解答
你这个程序还有个问题。
问题:
for each_line in txt:
line+=1
position = find_each_line_key(each_line,dict_key,line)#并没有判断 key 是否在 each_line 中
dict_key = position
修改:for each_line in txt:
line+=1
if key in each_line:# 增加一个判断语句,判断 key 是否在 each_line 中
position = find_each_line_key(each_line,dict_key,line)
dict_key = position
第二个函数出问题了。
问题是: line_key = each_line.find(key,line_key)
修改后: line_key = each_line.find(key,line_key+1)#第二次查找应该从 line_key + 1 处开始。
西伯利亚狼。, 发表于 2020-8-29 08:31
你这个程序还有个问题。
问题:
for each_line in txt:
已修改,但是修改后的程序会将所有txt文件返回,如何将增加的if判断语句同时运用在下面的print中?
西伯利亚狼。, 发表于 2020-8-29 08:31
你这个程序还有个问题。
问题:
for each_line in txt:
而且还会重复返回 我复制了你的程序,修改了两处问题,跑了一下并没有出现重复返回。应该是你后面又对你的程序做了改动,你试试用你帖子里的程序,然后修改这两处问题。 你应该把输出语句放在循环语句外面。 本帖最后由 秦镜lla 于 2020-8-29 17:07 编辑
西伯利亚狼。, 发表于 2020-8-29 16:43
你应该把输出语句放在循环语句外面。这是修改后的代码,我将输出语句放在判断语句的条件下确报错了:
import os
def print_answer(dict_key):
'''打印查找结果'''
keys = dict_key.keys()
keys = sorted(keys)
for each in keys:
print('关键字出现在第%s行,第%s个位置'%(each,dict_key))
def find_each_line_key(each_line,dict_key,line):
'''查找段落中的key'''
line_key = each_line.find(key)
position = []
while line_key != -1:
position.append(line_key+1)
line_key = each_line.find(key,line_key+1)
return position
def find_key(files,a,name,i):
'''打开文件并查找'''
txt = open(files)
line = 0
dict_key = dict()
for each_line in txt:
line+=1
if key in each_line:
position = find_each_line_key(each_line,dict_key,line)
dict_key = position
choice = 1
else:
break
if choice ==1:
print('在文件【%s】中找到关键字【%s】'%(i,name))
print_answer(dict_key)
print('===============================================================')
txt.close()
return dict_key
def open_file(list_txt,a,name,i):
'''打开文件'''
for files in list_txt:
dict_key = find_key(files,a,name,i)
#查找步骤
#打印结果
def find_file(key):
'''查找txt文件'''
list_txt = []
a = os.walk(os.getcwd())
for i in a:
for name in i:
more = os.path.splitext(name)
if more == '.txt':
list_txt.append((i+'\\'+name))
open_file(list_txt,a,name,i)
key = input('请将该脚本放于待查找的文件夹内,请输入关键字:')
check = input('请问是否需要打印关键字【%s】在文件中的具体位置(YES/NO):' % key)
check.lower()
if check == 'yes':
find_file(key)
choice 这个参数错了,如果choice上的if语句没有执行,那么choice这个参数就不会赋值,而且这个参数没有必要。你第一个程序写得挺好的,第二个程序你添加了一些不必要的句子,所以你安照第一个程序来修改,修改后再重新写一遍,这样你的记忆会加深。 西伯利亚狼。, 发表于 2020-8-29 18:28
choice 这个参数错了,如果choice上的if语句没有执行,那么choice这个参数就不会赋值,而且这个参数没有必 ...
好的,谢谢
页:
[1]