鱼C论坛

 找回密码
 立即注册
查看: 1255|回复: 12

[已解决]弹出异常 文件系统

[复制链接]
发表于 2018-5-1 11:06:15 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
#代码以下:



  1. import os

  2. def decide_condition(input_dir, keywords):
  3.     for each_file in os.listdir(input_dir):
  4.         file = open(input_dir + os.sep +  each_file, 'rb')
  5.         if keywords in file.read():
  6.             print('ddddd')

  7. input_dir = input('请输入开始路径:')
  8. keywords = input('请输入查找的关键字')


  9. decide_condition(input_dir, keywords)
复制代码



#弹出的异常:


  1. =================== RESTART: E:\python\findFileKeywords.py ===================
  2. 请输入开始路径:E:\python
  3. 请输入查找的关键字吴清明
  4. Traceback (most recent call last):
  5.   File "E:\python\findFileKeywords.py", line 78, in <module>
  6.     decide_condition(input_dir, keywords)
  7.   File "E:\python\findFileKeywords.py", line 71, in decide_condition
  8.     if keywords in file.read():
  9. TypeError: a bytes-like object is required, not 'str'
复制代码



#弹出异常用图片展示:

弹出异常.png




网上查了很多解决办法,没解决上,应该怎么解决,不会报错呀?
最佳答案
2018-5-1 14:23:25
本帖最后由 elang696 于 2018-5-1 14:33 编辑
金刚 发表于 2018-5-1 12:03
改成只读模式又会报错,报错内容是:


报错要的是字节类型,那就给它个字节类型,其他都不变,给keywords编码就可以了
  1. if keywords.encode('utf-8') in file.read():
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2018-5-1 11:24:23 | 显示全部楼层
file = open(input_dir + os.sep +  each_file, 'rb')
你这句话读的是二进制,给改成只读试试
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-5-1 12:03:16 | 显示全部楼层
alltolove 发表于 2018-5-1 11:24
file = open(input_dir + os.sep +  each_file, 'rb')
你这句话读的是二进制,给改成只读试试

改成只读模式又会报错,报错内容是:

  1. 请输入开始路径:E:\python
  2. 请输入查找的关键字吴清明
  3. ddddd
  4. Traceback (most recent call last):
  5.   File "E:\python\findFileKeywords.py", line 78, in <module>
  6.     decide_condition(input_dir, keywords)
  7.   File "E:\python\findFileKeywords.py", line 70, in decide_condition
  8.     all_content = file.read()
  9. UnicodeDecodeError: 'gbk' codec can't decode byte 0xaf in position 45: illegal multibyte sequence
复制代码



图片展示:

弹出异常1.png


一开始是用默认读取的,但是不行,然后我才改成了二进制读取方式,默认模式也会报错,查了之后改成二进制,就不会报默认那种的,改了之后可能if语句里不能识别两种形式的文本了,可能是。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-5-1 13:21:50 | 显示全部楼层
本帖最后由 一鱼 于 2018-5-1 13:23 编辑

你试试
  1. file = open(input_dir + os.sep +  each_file, 'r',encoding='utf-8')
复制代码

小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-5-1 14:23:25 | 显示全部楼层    本楼为最佳答案   
本帖最后由 elang696 于 2018-5-1 14:33 编辑
金刚 发表于 2018-5-1 12:03
改成只读模式又会报错,报错内容是:


报错要的是字节类型,那就给它个字节类型,其他都不变,给keywords编码就可以了
  1. if keywords.encode('utf-8') in file.read():
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-5-1 15:30:25 | 显示全部楼层
elang696 发表于 2018-5-1 14:23
报错要的是字节类型,那就给它个字节类型,其他都不变,给keywords编码就可以了

啊,不知道这个方法呀,没遇见过,谢谢
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-5-1 15:31:26 | 显示全部楼层
elang696 发表于 2018-5-1 14:23
报错要的是字节类型,那就给它个字节类型,其他都不变,给keywords编码就可以了

正好吃饭,一会儿看
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-5-1 16:48:23 | 显示全部楼层
编码问题,文件打开方式是二进制,出入的keyword是string类型,keywords = input() 下面加一句keywords = keywords.encode('utf-8')
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-5-1 20:55:35 | 显示全部楼层
金刚 发表于 2018-5-1 15:31
正好吃饭,一会儿看

#刚才的问题解决了,是因为读取.py文件内容时出那种情况,题目要求是只需要查询.txt文件就行,我就跳过.py文件了。但是现在又碰到别的问题了,这个又不知道怎么解决,我给你发一下报错内容,给我看看 ,谢谢了

  1. import os

  2. def decide_condition(input_dir, keywords):
  3.     for each_file in os.listdir(input_dir):
  4.         file = open(input_dir + os.sep +  each_file)
  5.         decide_txt = os.path.splitext(each_file)[1]
  6.         if decide_txt == '.txt':
  7.             if keywords in file.read():
  8.                 print('ddddd')
  9.                
  10.         if os.path.isdir(input_dir + os.sep +  each_file):
  11.             print('kkkkkk')

  12. input_dir = input('请输入开始路径:')
  13. keywords = input('请输入查找的关键字')

  14. decide_condition(input_dir, keywords)


复制代码



#报错内容是:


  1. 请输入开始路径:E:\python
  2. 请输入查找的关键字吴清明
  3. ddddd
  4. Traceback (most recent call last):
  5.   File "E:\python\findFileKeywords.py", line 101, in <module>
  6.     decide_condition(input_dir, keywords)
  7.   File "E:\python\findFileKeywords.py", line 89, in decide_condition
  8.     file = open(input_dir + os.sep +  each_file)
  9. PermissionError: [Errno 13] Permission denied: 'E:\\python\\截图'
复制代码



#图片展示报错内容:

弹出异常2.png
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-5-1 20:56:23 | 显示全部楼层
elang696 发表于 2018-5-1 14:23
报错要的是字节类型,那就给它个字节类型,其他都不变,给keywords编码就可以了

#刚才的问题解决了,是因为读取.py文件内容时出那种情况,题目要求是只需要查询.txt文件就行,我就跳过.py文件了。但是现在又碰到别的问题了,这个又不知道怎么解决,我给你发一下报错内容,给我看看 ,谢谢了

  1. import os

  2. def decide_condition(input_dir, keywords):
  3.     for each_file in os.listdir(input_dir):
  4.         file = open(input_dir + os.sep +  each_file)
  5.         decide_txt = os.path.splitext(each_file)[1]
  6.         if decide_txt == '.txt':
  7.             if keywords in file.read():
  8.                 print('ddddd')
  9.                
  10.         if os.path.isdir(input_dir + os.sep +  each_file):
  11.             print('kkkkkk')

  12. input_dir = input('请输入开始路径:')
  13. keywords = input('请输入查找的关键字')

  14. decide_condition(input_dir, keywords)


复制代码



#报错内容是:


  1. 请输入开始路径:E:\python
  2. 请输入查找的关键字吴清明
  3. ddddd
  4. Traceback (most recent call last):
  5.   File "E:\python\findFileKeywords.py", line 101, in <module>
  6.     decide_condition(input_dir, keywords)
  7.   File "E:\python\findFileKeywords.py", line 89, in decide_condition
  8.     file = open(input_dir + os.sep +  each_file)
  9. PermissionError: [Errno 13] Permission denied: 'E:\\python\\截图'
复制代码



#图片展示报错内容:

小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-5-1 21:01:51 | 显示全部楼层
elang696 发表于 2018-5-1 14:23
报错要的是字节类型,那就给它个字节类型,其他都不变,给keywords编码就可以了

#刚才的问题解决了,是因为读取.py文件内容时出那种情况,题目要求是只需要查询.txt文件就行,我就跳过.py文件了。但是现在又碰到别的问题了,这个又不知道怎么解决,我给你发一下报错内容,给我看看 ,谢谢了

  1. import os

  2. def decide_condition(input_dir, keywords):
  3.     for each_file in os.listdir(input_dir):
  4.         file = open(input_dir + os.sep +  each_file)
  5.         decide_txt = os.path.splitext(each_file)[1]
  6.         if decide_txt == '.txt':
  7.             if keywords in file.read():
  8.                 print('ddddd')
  9.                
  10.         if os.path.isdir(input_dir + os.sep +  each_file):
  11.             print('kkkkkk')

  12. input_dir = input('请输入开始路径:')
  13. keywords = input('请输入查找的关键字')

  14. decide_condition(input_dir, keywords)


复制代码



#报错内容是:


  1. 请输入开始路径:E:\python
  2. 请输入查找的关键字吴清明
  3. ddddd
  4. Traceback (most recent call last):
  5.   File "E:\python\findFileKeywords.py", line 101, in <module>
  6.     decide_condition(input_dir, keywords)
  7.   File "E:\python\findFileKeywords.py", line 89, in decide_condition
  8.     file = open(input_dir + os.sep +  each_file)
  9. PermissionError: [Errno 13] Permission denied: 'E:\\python\\截图'
复制代码



#图片展示报错内容:

弹出异常2.png
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-5-1 21:06:52 | 显示全部楼层
DevenVan 发表于 2018-5-1 16:48
编码问题,文件打开方式是二进制,出入的keyword是string类型,keywords = input() 下面加一句keywords = keyw ...

#刚才的问题,上面那位朋友的方法解决了,是因为读取.py文件内容时出那种情况,题目要求是只需要查询.txt文件就行,我就跳过.py文件了。但是现在又碰到别的问题了,这个又不知道怎么解决,我给你发一下报错内容,给我看看 ,谢谢了

  1. import os

  2. def decide_condition(input_dir, keywords):
  3.     for each_file in os.listdir(input_dir):
  4.         file = open(input_dir + os.sep +  each_file)
  5.         decide_txt = os.path.splitext(each_file)[1]
  6.         if decide_txt == '.txt':
  7.             if keywords in file.read():
  8.                 print('ddddd')
  9.                
  10.         if os.path.isdir(input_dir + os.sep +  each_file):
  11.             print('kkkkkk')

  12. input_dir = input('请输入开始路径:')
  13. keywords = input('请输入查找的关键字')

  14. decide_condition(input_dir, keywords)


复制代码



#报错内容是:


  1. 请输入开始路径:E:\python
  2. 请输入查找的关键字吴清明
  3. ddddd
  4. Traceback (most recent call last):
  5.   File "E:\python\findFileKeywords.py", line 101, in <module>
  6.     decide_condition(input_dir, keywords)
  7.   File "E:\python\findFileKeywords.py", line 89, in decide_condition
  8.     file = open(input_dir + os.sep +  each_file)
  9. PermissionError: [Errno 13] Permission denied: 'E:\\python\\截图'
复制代码



#图片展示报错内容:

弹出异常2.png
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-5-2 09:12:29 | 显示全部楼层
金刚 发表于 2018-5-1 21:01
#刚才的问题解决了,是因为读取.py文件内容时出那种情况,题目要求是只需要查询.txt文件就行,我就跳过.p ...

因为open没有权限读取'截图'文件夹,它只能读取'截图'里面的文件。

  1. filelist = []
  2. for root,dirs,files in os.walk(input_dir):
  3.         for name in files:
  4.                 filelist.append(os.path.join(root,name))
复制代码


现在就可以open filelist的每个文件了,不过原来的代码可能要改得面目全非
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2026-3-11 03:28

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表