python文件查找当前文件夹内文本文档内关键字无法运行
本帖最后由 苏东坡大居士 于 2021-1-2 12:30 编辑import os
#改变工作目录
path = os.chdir("E:\\python\\小甲鱼\\python代码")
#遍历path路径以下所有的子目录,返回一个三元组:(路径, [包含目录], [包含文件])
container = os.walk(path)
def find_txt(path):
#存放文本文件文件名
txt_name_container = []
#此时each_path的格式为(路径,[包含目录],[包含文件])
for each_path in container:
#此时each_file_name遍历each_name的文件
for each_file_name in each_path:
#splitext(path) 分离文件名与扩展名,返回(f_name, f_extension)元组
splited_name = os.path.splitext(each_file_name)
if splited_name == '.txt':
#file_path=each_path+'\\'+each_file_name#得到文本文件路径
file_path = os.path.join(each_path,each_file_name)
#将文本文件路径存入列表
txt_name_container.append(file_path)
return txt_name_container
def find_keyword(target_file_list,key_word,c):
positions = []
flag = 0
#遍历target_file_list
for each_file_name in target_file_list:
row = 0
#以只读文件方式打开文件
txt_file = open(each_file_name,'r',encoding='UTF-8')
#遍历打开的txt_file文件的每一行
for each_line in txt_file:
#当我们输入目标语句在each——line中时,打印该文件
if key_word in each_line:
print("========================")
#在含有目标文件的txt行中打印出第多少行时目标文件语段
print('在文件【%s】中找到关键字【%s】'%(each_file_name,key_word))
flag = 1
#关闭文件
txt_file.close()
break
if flag == 0:
print("没有在该文件夹中找到关键字!")
break
elif flag == 1 and c in['YES','yes','Y','y','Yes']:
#打开each_file_name
txt_file = open(each_file_name)
#遍历打开txt_file文件的每一行
for each_line in txt_file:
#计算each_line的行的数量
end = len(each_line)
row += 1
#Python3 range() 函数返回的是一个可迭代对象(类型是对象), 所以打印的时候不会打印列表。
#Python3 list() 函数是对象迭代器,可把range()返回的可迭代对象转为一个列表,返回的变量类型为列表。
for start in range(end):
p = (each_line.find(key_word,start,end)+1)
#print(p)
if p != 0 and p not in positions:
psoitions.append(p)
if positions:
print('关键字出现在第%d行的%d个位置'%(row,psoitions))
psoitions = []
txt_file.close()
target_file_list = input('请输入需要查找的目标文件夹:')
key_word = input("请输入需要查找的关键字:")
if __name__ == "_qd_main__":
find_keyword(target_file_list,key_word,"yes") 在if splited_name[1 == '.txt':这一句 少了半个中括号
import os
#改变工作目录
path = os.chdir("E:\\python\\小甲鱼\\python代码")
#遍历path路径以下所有的子目录,返回一个三元组:(路径, [包含目录], [包含文件])
container = os.walk(path)
def find_txt(path):
#存放文本文件文件名
txt_name_container = []
#此时each_path的格式为(路径,[包含目录],[包含文件])
for each_path in container:
#此时each_file_name遍历each_name的文件
for each_file_name in each_path:
#splitext(path) 分离文件名与扩展名,返回(f_name, f_extension)元组
splited_name = os.path.splitext(each_file_name)
if splited_name == '.txt':
#file_path=each_path+'\\'+each_file_name#得到文本文件路径
file_path = os.path.join(each_path,each_file_name)
#将文本文件路径存入列表
txt_name_container.append(file_path)
return txt_name_container
def find_keyword(target_file_list,key_word,c):
positions = []
flag = 0
#遍历target_file_list
for each_file_name in target_file_list:
row = 0
#以只读文件方式打开文件
txt_file = open(each_file_name,'r',encoding='UTF-8')
#遍历打开的txt_file文件的每一行
for each_line in txt_file:
#当我们输入目标语句在each——line中时,打印该文件
if key_word in each_line:
print("========================")
#在含有目标文件的txt行中打印出第多少行时目标文件语段
print('在文件【%s】中找到关键字【%s】'%(each_file_name,key_word))
flag = 1
#关闭文件
txt_file.close()
break
if flag == 0:
print("没有在该文件夹中找到关键字!")
break
elif flag == 1 and c in['YES','yes','Y','y','Yes']:
#打开each_file_name
txt_file = open(each_file_name)
#遍历打开txt_file文件的每一行
for each_line in txt_file:
#计算each_line的行的数量
end = len(each_line)
row += 1
#Python3 range() 函数返回的是一个可迭代对象(类型是对象), 所以打印的时候不会打印列表。
#Python3 list() 函数是对象迭代器,可把range()返回的可迭代对象转为一个列表,返回的变量类型为列表。
for start in range(end):
p = (each_line.find(key_word,start,end)+1)
#print(p)
if p != 0 and p not in positions:
psoitions.append(p)
if positions:
print('关键字出现在第%d行的%d个位置'%(row,psoitions))
psoitions = []
txt_file.close()
target_file_list = input('请输入需要查找的目标文件夹:')
key_word = input("请输入需要查找的关键字:")
if __name__ == "_qd_main__":
find_keyword(target_file_list,key_word,"yes")
???
os.chdir有返回值的吗??
你这函数用法就不对 本帖最后由 jackz007 于 2021-1-2 14:07 编辑
import os
def find(filename , keyword):
r = []
f = open(filename)
try:
c = 1
for x in f:
i = x . find(keyword , 0)
while i != -1:
r . append((c , i))
i = x . find(keyword , i + 1)
c += 1
except Exception as e:
print('*** 错误 ***')
print('\t文件 : ["%s"]' % filename)
print('\t' , e)
f . close()
return r
def find_keyword(rdir , keyword):
for root , dirs , files in os . walk(rdir):
for file in files:
filename = os . path . join(root , file)
ext = os . path . splitext(filename) . lower()
if ext == '.exe':
d = find(filename , keyword)
if d:
print('文件["%s"] , 关键字["%s"] : ' % (filename , keyword))
for x in d:
print('\t第 [%4d] 行第 [%4d] 列' % (x , x))
target_file_list = input('请输入需要查找的目标文件夹 : ')
key_word = input('请输入需要查找的关键字 : ')
find_keyword(target_file_list,key_word) qq1151985918 发表于 2021-1-2 12:31
在if splited_name
谢谢,还是不行的,我再去研究下{:5_109:} qiuyouzhi 发表于 2021-1-2 12:36
???
os.chdir有返回值的吗??
你这函数用法就不对
谢谢大佬的指点,这个可以的,我等下再修改下代码,就当是学习啦{:10_254:}
页:
[1]