马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
本帖最后由 调皮博士 于 2016-11-1 17:02 编辑
问题出自python第30讲课后习题4,我先是自己编了一个代码如下,不完全版:import os
def findkw(keyword,also,lujin = os.getcwd()):
for each in os.listdir(lujin): #思路:查找当前文件夹下的.txt文件并对其内容检索是否包含关键字
if os.path.splitext(each)[-1] in ['.txt']: #若包含则输出找到语句,然后再判断是否打印具体位置
if os.path.isfile(lujin+'\\'+each): # 若判断是则继续下一步的操作,这里由于在测试上一步检索的时候出错,所以并未完成
file = open(lujin+'\\'+each,'r',encoding = 'utf-8')
#encoding = 'utf-8'是我后来在网上自己找了一下问题后加进去的
if keyword in file.read():
print('='*20);print('在文件【%s】中找到关键字【%s】' %(lujin+'\\'+each,keyword))
if also.lower == 'yes':
turn = 0
for ks in file:
turn += 1
if keyword in ks:
print('关键字出现在第%d行,第%s个位置。'%(turn,ks.find(keyword)))
if os.path.splitext(each)[-1] == '': #这里是判断文件夹下的文件类型是否文件夹,是则循环。
searchtxt(keyword,also,lujin = lujin+'\\'+each) #当时不太懂,所以我这里没有用isdir()来判断
keyword = input('请将该脚本放于待查找的文件夹内,请输入关键字:')
also = input('请问是否需要打印关键字【%s】在文件中的具体位置(YES/NO):'%keyword)
findkw(keyword,also)
然后报错,原来没加encoding = 'utf-8'这一句的时候下面错误信息的utf-8处为gbk:
找来找去也没找到解决的方法,于是我便抄了小甲鱼的答案试了一遍:import os
def print_pos(key_dict): #yes or no 打印的位置信息
keys = key_dict.keys()
keys = sorted(keys)
for each_key in keys:
print('关键字出现在第%s行,第%s个位置。'%(each_key,str(key_dict[each_key])))
def pos_in_line(line,key): #解决了一段字符串中find多个位置的问题
pos = []
begin = line.find(key)
while begin != -1:
pos.append(begin + 1) #用户的角度是从1开始数
begin = line.find(key,begin+1) #从下一个位置继续查找
return pos
def search_in_file(file_name,key):
f = open(file_name)
count = 0 #记录行数
key_dict = dict() #字典,用户存放key所在具体行数对应具体位置
for each_line in f:
count += 1
if key in each_line:
pos = pos_in_line(each_line,key) # key在每行对应的位置
key_dict[count] = pos
f.close()
return key_dict
def search_files(key,detail):
all_files = os.walk(os.getcwd())
txt_files = []
for i in all_files:
for each_file in i[2]:
if os.path.splitext(each_file)[1] == '.txt': #根据后缀名判断是否文本文件
each_file = os.path.join(i[0],each_file)
txt_files.append(each_file)
for each_txt_file in txt_files:
key_dict = search_in_file(each_txt_file,key)
if key_dict:
print('='*20)
print('在文件【%s】中找到关键字【%s】'%(each_txt,key))
if detail in ['yes','YES','Yes']:
print_pos(key_dict)
key = input('请将该脚本放于待查找的文件夹内,请输入关键字:')
detail = input('请问是否需要打印关键字【%s】在文件中的具体位置(YES/NO):'% key)
search_files(key,detail)
结果还是报错:
至此我确定是解码的时候出现了问题,但我不知道要怎么解决,故上来请教大神。
下面是我要查找的文档内容和路径截图,本人用的win10家庭版,python版本3.5:
|