|
|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
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:
|
|