|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
想要实现的是小甲鱼30课的课后作业4(稍微有点改变)
题目:编写一个程序,用户输入关键字,查找当前文件夹内(如果当前文件夹内包含文件夹,则进入文件夹继续搜索)所有含有该关键字的文本文件,要求显示该文件所在的位置以及关键字在文件中的具体位置(第几行第几个字符)。
程序跑的时候对第一个检索的文件是可以正常实现的(验证也是对的),但检索完第一个就报错了,不知道问什么
求求大家指点迷津
我写的:[code]
import os
catelogue = input('请输入需要查找的文件夹:')
os.chdir(catelogue)
keyword = input('请输入关键字:')
decision = input('请问是否需要打印关键字【%s】在文件夹中的具体位置(YES/NO):' % keyword)
if decision == 'YES':
whole = list(os.walk(catelogue))
for each in whole:
for file in each[2]:
f = open(os.path.join(each[0],file))
if keyword in f.read():
print('========================================\n在文件【%s】中找到关键字【%s】' % (os.path.join(each[0],file),keyword))
count = 1
f.seek(0,0)
for each_line in f:
if keyword in each_line:
temp = []
i = 0
length = len(each_line)
while (each_line.find(keyword,i,length) + 1):
temp.append(each_line.find(keyword,i,length))
i = each_line.find(keyword,i,length) + 1
print('关键字出现在第%d行,第%s个位置。' % (count,str(temp)))
count += 1
f.close()
这是程序实现情况:
=========== RESTART: /Users/zhangpuming/Desktop/python/python30.4.py ===========
请输入需要查找的文件夹:/Users/zhangpuming/Desktop/python
请输入关键字:each
请问是否需要打印关键字【each】在文件夹中的具体位置(YES/NO):YES
========================================
在文件【/Users/zhangpuming/Desktop/python/python19.1.py】中找到关键字【each】
关键字出现在第6行,第[8]个位置。
关键字出现在第8行,第[12, 27]个位置。
关键字出现在第9行,第[15]个位置。
关键字出现在第11行,第[17]个位置。
关键字出现在第13行,第[17]个位置。
关键字出现在第17行,第[18]个位置。
Traceback (most recent call last):
File "/Users/zhangpuming/Desktop/python/python30.4.py", line 13, in <module>
if keyword in f.read():
File "/Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/codecs.py", line 322, in decode
(result, consumed) = self._buffer_decode(data, self.errors, final)
UnicodeDecodeError: 'utf-8' codec can't decode byte 0xb0 in position 433: invalid start byte
文件夹中的 txt 文本编码不一致,有的 txt 文本是 gbk 编码的 有的 是 utf-8 编码的 导致报错,因为我们 open 读取文件一次只能填写一个编码
建议重新创建个新的文件夹,然后你要测试的话再在这个文件夹里面创建新的 文件夹和 txt 文件
要创建同编码的 txt 文件 ,创建方法如下:
第一步,打开记事本,选另存为:
第二步,设置编码储存,这里选择什么,open 的 encoding 参数就要填什么,默认是GBK 可以不用填:
你可以设置为 ANSI 就可以不用设置 encoding 的编码的,如图第一个编码:
|
|