python课后作业第30讲:文件系统
import osimport os.path
def print_pos(key_dict):
keys = key_dict.keys()
keys = sorted(keys)
for each_key in keys:
print('关键字出现在第%s行,第%s个位置' % (each_key,str(key_dict)))
def pos_in_line(line,key):
pos = []
begin = line.find(key)
while begin != -1:
pos.append(begin + 1)
begin = line.find(key,begin + 1)
return pos
def search_in_file(file_name,key):
f = open(file_name,encoding='UTF-8')
count = 0
key_dict = dict()
for each_line in f:
count += 1
if key in each_line:
pos = pos_in_line(each_line,key)
key_dict = pos
f.close()
return key_dict
def search_file(key,detail):
all_files = os.walk(os.getcwd())
txt_files = []
for i in all_files:
for each_file in i:
if os.path.splitext(each_file) == '.txt':
each_file = os.path.join(i,each_file)
txt_files.append(each_file)
for each_txt_file in txt_files:
key_dict = search_in_file(each_txt_file,key)
if key_dict:
print('========================\n')
print('在文件【%s】中找到关键字【%s】' % (each_txt_file,key))
if detail in ['YES','Yes','yes']:
print_pos(key_dict)
key = input('请输入要查找的关键字:')
detail = input('请问是否需要打印关键字【%s】在文件中的具体位置(YES/NO):' % key)
search_file(key,detail)
求助论坛的朋友们,为什么我这段代码会出现以下的错误?
======= RESTART: C:/Users/xunqing zhang/Desktop/练习/练习28课后题/练习28课后题4答案.py =======
请输入要查找的关键字:小甲鱼
请问是否需要打印关键字【小甲鱼】在文件中的具体位置(YES/NO):yes
========================
在文件【C:\Users\xunqing zhang\Desktop\练习\练习28课后题\test.txt】中找到关键字【小甲鱼】
关键字出现在第4行,第个位置
关键字出现在第5行,第个位置
关键字出现在第8行,第个位置
Traceback (most recent call last):
File "C:/Users/xunqing zhang/Desktop/练习/练习28课后题/练习28课后题4答案.py", line 57, in <module>
search_file(key,detail)
File "C:/Users/xunqing zhang/Desktop/练习/练习28课后题/练习28课后题4答案.py", line 47, in search_file
key_dict = search_in_file(each_txt_file,key)
File "C:/Users/xunqing zhang/Desktop/练习/练习28课后题/练习28课后题4答案.py", line 26, in search_in_file
for each_line in f:
File "C:\Users\xunqing zhang\AppData\Local\Programs\Python\Python39\lib\codecs.py", line 322, in decode
(result, consumed) = self._buffer_decode(data, self.errors, final)
UnicodeDecodeError: 'utf-8' codec can't decode byte 0xc1 in position 31: invalid start byte
谢谢大家 确定你的所有文件都是以utf8编码格式保存的吗 本帖最后由 sunrise085 于 2020-11-30 15:44 编辑
没有其他问题,就是你所打开的文件编码不正确,部分内容不是utf8编码。
你把你这个txt文件打开,另存一下,存储的时候修改一下编码就可以了 sunrise085 发表于 2020-11-30 15:08
没有其他问题,就是你锁打开的文件编码不正确,部分内容不是utf8编码。
你把你这个txt文件打开,另存一下 ...
谢谢您,确实有一个不是UTF-8编码 西瓜味的苹果 发表于 2020-11-30 14:46
确定你的所有文件都是以utf8编码格式保存的吗
谢谢您,确实有一个不是UTF-8编码~ ilovedota2 发表于 2020-11-30 15:22
谢谢您,确实有一个不是UTF-8编码~
有一个小小的细节纠正你一下,并不是utf8无敌,而是其他gbk,gb2312什么的都可以编码,解码。需要记住的是只要时时刻刻保持你的文件以什么编码保存的,那么就用什么编码读取就行!!主要是python默认是utf8,并且utf8很好用,所以很多回答都是utf8
备注:(我回答的这么棒,然而不给我好评,{:5_90:})哈哈,开玩笑的。 西瓜味的苹果 发表于 2020-11-30 15:34
有一个小小的细节纠正你一下,并不是utf8无敌,而是其他gbk,gb2312什么的都可以编码,解码。需要记住的是 ...
好的,谢谢您哈~
页:
[1]