苏东坡大居士 发表于 2021-1-2 12:26:18

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")

qq1151985918 发表于 2021-1-2 12:31:31

在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")

qiuyouzhi 发表于 2021-1-2 12:36:29

???
os.chdir有返回值的吗??
你这函数用法就不对

jackz007 发表于 2021-1-2 14:05:31

本帖最后由 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)

苏东坡大居士 发表于 2021-1-2 19:06:21

qq1151985918 发表于 2021-1-2 12:31
在if splited_name

谢谢,还是不行的,我再去研究下{:5_109:}

苏东坡大居士 发表于 2021-1-2 19:07:00

qiuyouzhi 发表于 2021-1-2 12:36
???
os.chdir有返回值的吗??
你这函数用法就不对

谢谢大佬的指点,这个可以的,我等下再修改下代码,就当是学习啦{:10_254:}
页: [1]
查看完整版本: python文件查找当前文件夹内文本文档内关键字无法运行