代码编写问题
https://fishc.com.cn/thread-45649-1-2.html课后作业4
运行时会报错,请问问题出在哪?
import os
def search_file(start_dir,target):
os.chdir(os.curdir)
for each_file in os.listdir(os.curdir):
ext = os.path.splitext(each_file)
if ext == '.txt':
file_path = os.getcwd()+os.sep+each_file
file = open(file_path)
line_number = 0
title = 1
for each_line in file:
line_number+=1
target_number = []
if target in each_line:
begin = each_line.find(target)
while begin != -1:
target_number.append(begin+1)
begin = line.find(target,begin+1)
if target_number:
if title:
print('='*90)
print('在文件【%s】中找到关键字【%s】' % (file_path,target))
title = 0
if choice in ['YES','Yes','yes']:
print('关键字出现在第 %d 行,第 %s 个位置' % (line_number,str(target_number)))
elif os.path.isdir(each_file):
search_file(each_file,target)
os.chdir(os.pardir)
target = input('请将该脚本放于待查找的文件夹内,请输入关键字:')
choice = input('请问是否需要打印关键字【%s】在文件夹中的具体位置(YES/NO):' % target)
search_file(os.curdir,target) 下面是在你代码基础上做修改的,已备注。需要注意python默认gbk解码,txt一般默认utf-8,所以根据你的文件编码格式做调整。你可以打开txt文档,另存的时候看下下方的编码是什么。
另一个是基础错误...上下变量不一致;
import os
def search_file(start_dir,target):
os.chdir(os.curdir)
for each_file in os.listdir(os.curdir):
ext = os.path.splitext(each_file)
if ext == '.txt':
file_path = os.getcwd()+os.sep+each_file
file = open(file_path,encoding='utf-8') #修改,解码格式utf-8
print(file_path)
line_number = 0
title = 1
for each_line in file:
line_number+=1
target_number = []
if target in each_line:
begin = each_line.find(target)
while begin != -1:
target_number.append(begin+1)
begin = each_line.find(target,begin+1)#修改,不是line,是each_line
if target_number:
if title:
print('='*90)
print('在文件【%s】中找到关键字【%s】' % (file_path,target))
title = 0
if choice in ['YES','Yes','yes']:
print('关键字出现在第 %d 行,第 %s 个位置' % (line_number,str(target_number)))
elif os.path.isdir(each_file):
search_file(each_file,target)
os.chdir(os.pardir)
target = input('请将该脚本放于待查找的文件夹内,请输入关键字:')
choice = input('请问是否需要打印关键字【%s】在文件夹中的具体位置(YES/NO):' % target)
search_file(os.curdir,target) yhhpf 发表于 2020-8-27 14:02
下面是在你代码基础上做修改的,已备注。需要注意python默认gbk解码,txt一般默认utf-8,所以根据你的文件 ...
我已经把所有的.txt文档编码格式调为ANSI,所以不存在第一个问题。
它报的错误是:
RecursionError: maximum recursion depth exceeded in comparison Tom学编程 发表于 2020-8-27 15:41
我已经把所有的.txt文档编码格式调为ANSI,所以不存在第一个问题。
它报的错误是:
超过递归最大深度了,你看下是否无限循环了,或者文件太大。 我知道哪错了,谢谢! Tom学编程 发表于 2020-8-27 15:41
我已经把所有的.txt文档编码格式调为ANSI,所以不存在第一个问题。
它报的错误是:
看了下,是无限循环了,下面elif那。 Tom学编程 发表于 2020-8-27 15:44
我知道哪错了,谢谢!
额,找了下以前自己写的,你看下有用不。
记得给个最佳哦0.0哈哈
##用户输入目标文件,需要替换的文本,需要替换的内容,输出替换后的结果;
def file_replace(file_name,old,new):
#打开文件,查找出那些需要替换,并记录下来
f = open(file_name,encoding='utf-8')
txt = []
count = 0
for each_line in f:
if old in each_line:
count += each_line.count(old)
each_line = each_line.replace(old,new)
txt.append(each_line)
decide = input('\n文件%s中共有%s处需要替换\n您确定要将【%s】替换为【%s】么?\n请输入【YES/NO】:' \
% (file_name,count,old,new))
if decide in ["YES",'yes','Yes']:
f_write = open(file_name,'w',encoding='utf-8')
f_write.writelines(txt)
f_write.close()
else:
print('未替换,程序结束')
f.close()
file_name = input('请输入需要替换内容的模板文件名:')
old = input('请输入需要更换的内容:')
new = input('请输入需要更换为:')
file_replace(file_name,old,new)
页:
[1]