|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
本帖最后由 chunchun2017 于 2019-11-29 17:20 编辑
第030讲:文件系统:介绍一个高大上的东西的课后作业第4题,题目为
编写一个程序,用户输入关键字,查找当前文件夹内(如果当前文件夹内包含文件夹,则进入文件夹继续搜索)所有含有该关键字的文本文件(.txt后缀),要求显示该文件所在的位置以及关键字在文件中的具体位置(第几行第几个字符),程序实现如图1:所示。
为了完成这个题目,编写代码如下:
- def findfile(search_path,search_name):
- os.chdir(search_path)
- print('当前目录是{}'.format(search_path))
- len0=len(search_name)
- for root,dirs,files in os.walk(search_path,topdown=False):
- for name in files:
- (f_name,f_ext)=os.path.splitext(name)
- if f_ext=='.txt':
- count=0
- r_file=open(name)
- if search_name in r_file.read():
- print('在文件【%s】中找到关键字【%s】' % (os.path.join(root,name),search_name))
- r_file.close()
- r_file=open(name)
- for each in r_file:
- list0=['']
- count+=1
- len0=len(each)
- start=0
- while each.find(search_name,start)!=-1:
- list0[0]=count
- start=each.find(search_name,start)
- list0.append(start)
- if start<len0-1:
- start+=1
- if list0[0]!='':
- print('关键字出现在第{0}行,第{1}个位置。'.format(list0[0],list0[1:]))
-
- import os
- #search_path=input(r'请输入待查找的初始目录:')
- search_path=r'E:\Python3\code\030讲'
- #search_name=input('请将该脚本放入待查找的文件夹内,请输入关键字:')
- search_name='小甲鱼'
- findfile(search_path,search_name)
-
复制代码
没想到运行报错,结果见图2:
于是参照网上的解决办法,设置打开文件时的encoding值,修改代码如下
- def findfile(search_path,search_name):
- os.chdir(search_path)
- print('当前目录是{}'.format(search_path))
- len0=len(search_name)
- for root,dirs,files in os.walk(search_path,topdown=False):
- for name in files:
- (f_name,f_ext)=os.path.splitext(name)
- if f_ext=='.txt':
- count=0
- r_file=open(name,encoding='UTF-8',errors='ignore')
- if search_name in r_file.read():
- print('在文件【%s】中找到关键字【%s】' % (os.path.join(root,name),search_name))
- r_file.close()
- r_file=open(name,encoding='UTF-8',errors='ignore')
- for each in r_file:
- list0=['']
- count+=1
- len0=len(each)
- start=0
- while each.find(search_name,start)!=-1:
- list0[0]=count
- start=each.find(search_name,start)
- list0.append(start)
- if start<len0-1:
- start+=1
- if list0[0]!='':
- print('关键字出现在第{0}行,第{1}个位置。'.format(list0[0],list0[1:]))
-
- import os
- #search_path=input(r'请输入待查找的初始目录:')
- search_path=r'E:\Python3\code\030讲'
- #search_name=input('请将该脚本放入待查找的文件夹内,请输入关键字:')
- search_name='小甲鱼'
- findfile(search_path,search_name)
-
复制代码
没想到运行结果却是下面的图3所示
图2和图3显示的文件行数和位置数,都是正确的,但是为什么两个版本的代码显示的结果是完全不一样的呢?
请问这个是为什么啊?求各位指点 |
|