鱼C论坛

 找回密码
 立即注册
查看: 1171|回复: 2

[已解决]第030讲:文件系统作业 指定的‘.txt’文件已经找到,但最后还是报错!!!

[复制链接]
发表于 2020-8-1 18:53:42 | 显示全部楼层 |阅读模式

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

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

x
第030讲:文件系统作业     编写一个程序,用户输入关键字,查找当前文件夹内(如果当前文件夹内包含文件夹,则进入文件夹继续搜索)所有含有该关键字的文本文件(.txt后缀),要求显示该文件所在的位置以及关键字在文件中的具体位置(第几行第几个字符)
请教问题:为什么我的程序对所在目录下的“.txt”都能找到,但对于查找关键字在文件中的具体位置时却找不到或者报错!!请大佬指点!!!

报错现象
报错1.jpg

import os
name = input('请将该脚本放于待查找第文件夹内,请输入关键字:')
os.chdir('e:\\')
print(os.getcwd())
file_name = os.walk('e:\\')
file = []
result = []
num_hh = 0
num_zf = 0
#查找指定目录下所有'.txt'文件
for each in file_name:
    for each11 in each[2]:
        if (os.path.splitext(each11))[1] == '.txt':
            file.append((each[0],each11))
print(file)
answer = input('请问是否要打印关键字【{0}在文件中的具体位置(YES/NO)】:')
#查找所有'.txt'文件下含有关键字'name'的行号和字符号
for each11 in file:
    os.chdir(each11[0])
    f = open(each11[1],'r', encoding='UTF-8')      #报错地点
    for eachline in f:
        print(eachline)
        for each22 in eachline:
            
            if name == each22:
                num_zf += 1
                print('在文件【{0}】中找到{1}'.format(each11,name))
                print('【{0}】出现在第{1}行,第{2}位置'.format(name,num_hh,num_zf))
        num_hh += 1
最佳答案
2020-8-1 18:54:50

隔壁也有个帖子一样的问题,现在直接 copy 了:

报错原因:当前统计的文件下有多种编码格式的 txt 文本文件,导致 open 参数只能指定一种编码,而使得打开不同编码 txt 文件时候引发报错

解决方法:创建一个新文件夹,将代码文件存放在新建文件夹内,再将你的 txt 测试文本按下面操作重新另存为设置下文件编码

第一步,打开 txt 文件点击另存为:

                               
登录/注册后可看大图



第二步,选择编码,这里选择 utf-8 ,那么 open 参数里面就必须带上 encoding = 'UTF-8':


                               
登录/注册后可看大图



或者选择 ANSI ,如果是 ANSI 编码,那么 open 里面就不用加上 encoding 参数:


                               
登录/注册后可看大图


想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-8-1 18:54:41 | 显示全部楼层
试试将 encoding='UTF-8' 去掉
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-8-1 18:54:50 | 显示全部楼层    本楼为最佳答案   

隔壁也有个帖子一样的问题,现在直接 copy 了:

报错原因:当前统计的文件下有多种编码格式的 txt 文本文件,导致 open 参数只能指定一种编码,而使得打开不同编码 txt 文件时候引发报错

解决方法:创建一个新文件夹,将代码文件存放在新建文件夹内,再将你的 txt 测试文本按下面操作重新另存为设置下文件编码

第一步,打开 txt 文件点击另存为:

                               
登录/注册后可看大图



第二步,选择编码,这里选择 utf-8 ,那么 open 参数里面就必须带上 encoding = 'UTF-8':


                               
登录/注册后可看大图



或者选择 ANSI ,如果是 ANSI 编码,那么 open 里面就不用加上 encoding 参数:


                               
登录/注册后可看大图


想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-1-19 17:05

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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