python第30课 课后作业,第四题
本帖最后由 paohhee 于 2021-3-27 17:50 编辑def find_key():
'''编写一个程序,用户输入关键字,查找当前文件夹内
(如果当前文件夹内包含文件夹,则进入文件夹继续搜索)所有含有该关键字的
文本文件(.txt后缀),要求显示该文件所在的位置以及关键字在文件中的具体位置
(第几行第几个字符)'''
import os
key = input("请将脚本放于待查找的文件夹内,请输入关键字:")
flag = input("请问是否需要打印关键字[%s]在文件中的具体位置(YES/NO):" % key)
def function(key):
os.chdir(os.curdir)
local = os.listdir(os.curdir)
for each in local:
if os.path.isfile(each):
file_name = os.getcwd() + os.sep + each
list1 = []
count = 0
again = True
f = open(file_name, "r", encoding='gbk')
for j in f:
list1.append(j)
f.close()
for string in list1:
if again and string.find(key)+1:
print("=" * 20)
print("\n" + "文件[%s]中找到关键字[%s]"
% (file_name, key))
again = False
index = []
while True:
if string.find(key) != -1:
num = string.find(key)
index.append(num)
string = string[:num] + "1"*len(key) + string
else:
break
count += 1
if index:
print("关键字出现在%d行,第%s个位置" % (count, index))
if os.path.isdir(each):
function(key)
os.chdir(os.pardir)
if flag.upper() == "YES":
function(key)
运行起来发现一直在报:UnicodeDecodeError: 'gbk' codec can't decode byte 0xa7 in position 223: illegal multibyte sequence
估计是for j in f:那个语句那里出的问题可是不知道错在哪里,求大神帮忙纠正一下
而且发现了只要其他另一类文件不在此文件夹中,就不会报错
paohhee 发表于 2021-3-30 20:52
一样的嗷都是报错
UnicodeDecodeError: 'utf-8' codec can't decode byte 0x80 in position 0 ...
open('文件路径',encoding='gb18030',errors='ignore')
试试{:10_282:} f = open(file_name, "r", encoding='gbk')改成
f = open(file_name, "r", encoding='utf-8')
试试看 Daniel_Zhang 发表于 2021-3-28 04:23
f = open(file_name, "r", encoding='gbk')改成
f = open(file_name, "r", encoding='utf-8')
试过了也还是会报错{:10_266:} paohhee 发表于 2021-3-28 10:10
试过了也还是会报错
嘶,那我没招了{:10_266:} paohhee 发表于 2021-3-28 10:10
试过了也还是会报错
要不你单独拉一个py文件,打开那个文件,看看能不能打开 Daniel_Zhang 发表于 2021-3-28 13:22
要不你单独拉一个py文件,打开那个文件,看看能不能打开
如果目录里面全是.py的文件就能正常打开,一旦有其他的文件就打开文件的时候编码那儿报错 paohhee 发表于 2021-3-28 21:00
如果目录里面全是.py的文件就能正常打开,一旦有其他的文件就打开文件的时候编码那儿报错
那我知道了,你搞个try-except 看看
有可能是既有 gbk,又有 utf-8 的{:10_250:} Daniel_Zhang 发表于 2021-3-28 21:32
那我知道了,你搞个try-except 看看
有可能是既有 gbk,又有 utf-8 的
太久没写python了啥也不会了
等我学学先 # -*- coding:utf-8 -*- 头部加一个这个试试? 抉择啊 发表于 2021-3-30 19:56
头部加一个这个试试?
一样的嗷都是报错{:10_266:}
UnicodeDecodeError: 'utf-8' codec can't decode byte 0x80 in position 0: invalid start byte 你保存文件时用的什么编码? 本帖最后由 jackz007 于 2021-3-31 15:17 编辑
楼主,试试这个代码
#coding:gbk
import os
import sys
def search(dir , key):
try:
for each in os . listdir(dir):
x = os . path . join(dir , each)
if os . path . isfile(x):
fp = open(x , 'rb')
b = fp . read()
fp . close()
e = True
try:
txt = b . decode('GBK')
except:
try:
txt = b . decode('UTF-8')
except:
sys . stderr . write('*** 无法按文本读取文件 : ' + x + '\n')
e = False
if e:
d , i = [] , 0
for s in txt . split('\n'):
c = s . find(key , 0)
while c != -1:
d . append((i + 1 , c + 1))
c = s . find(key , c + len(key))
i += 1
if(d):
sys . stdout . write('在文件 : ' + x + ' 中找到关键字\n')
for k in d:
sys . stdout . write('\t第 %d 行,第 %d 列\n' % (k , k))
elif os . path . isdir(x):
search(x , key)
except Exception as e:
sys . stderr . write(e + '\n')
p = input('输入路径 [%s] : ' % os . getcwd()) . strip()
if not p:
p = os . getcwd()
k = input('输入关键字 : ') . strip()
if k:
search(p , k)
页:
[1]