小白轻喷:为什么程序对第一个文件可以正常执行,第二个就会报错???
想要实现的是小甲鱼30课的课后作业4(稍微有点改变)题目:编写一个程序,用户输入关键字,查找当前文件夹内(如果当前文件夹内包含文件夹,则进入文件夹继续搜索)所有含有该关键字的文本文件,要求显示该文件所在的位置以及关键字在文件中的具体位置(第几行第几个字符)。
程序跑的时候对第一个检索的文件是可以正常实现的(验证也是对的),但检索完第一个就报错了,不知道问什么{:5_100:}
求求大家指点迷津{:5_100:}
我写的:
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:
f = open(os.path.join(each,file))
if keyword in f.read():
print('========================================\n在文件【%s】中找到关键字【%s】' % (os.path.join(each,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行,第个位置。
关键字出现在第9行,第个位置。
关键字出现在第11行,第个位置。
关键字出现在第13行,第个位置。
关键字出现在第17行,第个位置。
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 文件 ,创建方法如下:
第一步,打开记事本,选另存为:
https://xxx.ilovefishc.com/forum/202005/25/072650zqq1fqqmng421bqz.jpg
第二步,设置编码储存,这里选择什么,open 的 encoding 参数就要填什么,默认是GBK 可以不用填:
https://xxx.ilovefishc.com/forum/202005/25/072647nvzjv2zemvgxet5g.jpg
你可以设置为 ANSI 就可以不用设置 encoding 的编码的,如图第一个编码:
f = open(os.path.join(each,file))
改为f = open(os.path.join(each,file),encoding = 'utf-8')试试
还有就是在txt文档中中的保存格式不一样是会报错的,如果用encoding = 'utf-8'的话只能打开编码是utf-8的文档,具体可以修改
假设 你选的是 utf-8那么 open 那参数多加个 encoding = 'UTF-8' 即可:
像这样:
open(file_name,encoding = 'utf-8') Twilight6 发表于 2020-6-22 22:30
文件夹中的 txt 文本编码不一致,有的 txt 文本是 gbk 编码的 有的 是 utf-8 编码的 导致报错,因为我 ...
哈哈哈,他这个问题和我之前的一摸一样 小甲鱼的铁粉 发表于 2020-6-22 22:32
哈哈哈,他这个问题和我之前的一摸一样
嗯嗯我之前帮别人解答好几次了图片都存相册里了 Twilight6 发表于 2020-6-22 22:33
嗯嗯我之前帮别人解答好几次了图片都存相册里了
{:10_275:}太细心了 Twilight6 发表于 2020-6-22 22:33
嗯嗯我之前帮别人解答好几次了图片都存相册里了
感谢🙏我去试试 小甲鱼的铁粉 发表于 2020-6-22 22:31
改为f = open(os.path.join(each,file),encoding = 'utf-8')试试
还有就是在txt文档中中的保存格式不 ...
嗯嗯谢谢!
刚刚开始没看楼主你的标题,如果就两个文件的话 你把第二个文件重新存下 改下编码为 ANSI 即可了
如果还是有问题,那你可以把一个个文件都重新另存为下,设置下统一保存的编码格式,然后再次运行代码就没问题了
小甲鱼的铁粉 发表于 2020-6-22 22:31
改为f = open(os.path.join(each,file),encoding = 'utf-8')试试
还有就是在txt文档中中的保存格式不 ...
可是报错写的是 UTF-8 不能解码,说明这不是 UTF-8 文档。 永恒的蓝色梦想 发表于 2020-6-22 22:40
可是报错写的是 UTF-8 不能解码,说明这不是 UTF-8 文档。
嗯,这是我的问题,我说的不对{:10_297:}
页:
[1]