莫待无花空折枝 发表于 2020-5-26 10:16:36

零基础python-关键字查找

#第一步输入关键字与选择
#第二步找到所有txt文件
#第三步在txt文件中逐行查找关键字,并找到出现的行数和每行出现的位置
#第四步按格式打印
import os
def find_word(key_word,choice):
      
    txt_file = []    #用来储存找到的txt文件
    for root,dirs,files in os.walk(os.curdir):#遍历当前工作目录下的所有子目录,返回一个三元组
      for each_file in files:
            ext = os.path.splitext(each_file)   #分割出每个文件的后缀名
            if ext == "txt":
                txt_file.append(each_file)

   
    for one_file in txt_file:            
      pos_dict = pos_word(one_file,key_word)
      if pos_dict:
            print("=================================================================================")
            print("在文件【%s】中找到关键字【%s】"%(root+os.sep+one_file,key_word))
            if detail in ['YES', 'Yes', 'yes']:
                print_pos(pos_dict)


def pos_word(one_file,key_word):   #在txt文件中逐行查找关键字
   
    f = open(one_file)
    count = 0                  #统计行数,并且行与每行出现位置一一对应,所以引入字典来存储
    pos_dict = dict()
    for each_line in f:
      count += 1
      if key_word in each_line:
            pos_dict = pos(each_line,key_word)

    f.close()
    return pos_dict

def pos(each_line,key_word):
    pos = []
    begin = each_line.find(key_word)   #检测关键字是否在字符串中,如果在则返回索引值,否则返回-1
    while begin != -1:               #关键字在字符串中时,迭代找每行出现的位置
      pos.append(begin+1)          #人从第一个位置找
      begin = each_line.find(key_word,begin+1)   #在该行从下一个位置继续找
    return pos

def print_pos(pos_dict):
    for one_key in pos_dict.keys():
      print("关键字出现在第%s行,第[%s]个位置"%(one_key,pos.dict))

key_word = input("请将该脚本放于待查找的文件夹内,请输入关键字:")
choice = input("请问是否需要打印关键字【%s】在文件中的具体位置(YES/NO):"%key_word)
find_word(key_word,choice)
结果为:
>>>
=== RESTART: C:/Users/admin/Desktop/课后练习/008-查找当前目录下含关键字文件中关键字出现的行数与位置.py ===
请将该脚本放于待查找的文件夹内,请输入关键字:我
请问是否需要打印关键字【我】在文件中的具体位置(YES/NO):YES
>>>
该文件中含我关键字的txt文件

Twilight6 发表于 2020-5-26 10:22:43

本帖最后由 Twilight6 于 2020-5-26 10:24 编辑

没错 是我理解错了我再看看

Twilight6 发表于 2020-5-26 10:31:45

这个:if ext == "txt":改成:if ext == ".txt":
这个:if detail in ['YES', 'Yes', 'yes']:改成:f choice in ['YES', 'Yes', 'yes']:

Twilight6 发表于 2020-5-26 10:41:11

代码错的地方好多,还有没有对应打印路径,文件路径打印的不正确,

这里代码应该是你大意打错了变量名吧:
print("关键字出现在第%s行,第[%s]个位置"%(one_key,pos.dict))
应该是:
print("关键字出现在第%s行,第[%s]个位置"%(one_key,pos_dict))
的吧....反正很多错误。。。

莫待无花空折枝 发表于 2020-5-26 10:55:00

确实,太粗心了,回头看还发现不了
谢谢大佬{:10_254:}

Twilight6 发表于 2020-5-26 11:06:31

莫待无花空折枝 发表于 2020-5-26 10:55
确实,太粗心了,回头看还发现不了
谢谢大佬

{:10_297:} 没点回复我刚刚都没看见你发我消息

莫待无花空折枝 发表于 2020-5-26 13:04:20

Twilight6 发表于 2020-5-26 11:06
没点回复我刚刚都没看见你发我消息

for each_txt_file in txt_files:
      key_dict = search_in_file(each_txt_file, key)
      if key_dict:
            print('================================================================')
            print('在文件【%s】中找到关键字【%s】' % (each_txt_file, key))
            if detail in ['YES', 'Yes', 'yes']:
                print_pos(key_dict)
小甲鱼 这一步就能打印
请将该脚本放于待查找的文件夹内,请输入关键字:我
请问是否需要打印关键字【我】在文件中的具体位置(YES/NO):YES
================================================================
在文件【C:\Users\admin\Desktop\课后练习\record2.txt】中找到关键字【我】
关键字出现在第 3 行,第 个位置。
关键字出现在第 5 行,第 个位置。
关键字出现在第 9 行,第 个位置。
关键字出现在第 10 行,第 个位置。
关键字出现在第 15 行,第 个位置。
关键字出现在第 16 行,第 个位置。
关键字出现在第 17 行,第 个位置。
关键字出现在第 30 行,第 个位置。
关键字出现在第 31 行,第 个位置。
================================================================
在文件【C:\Users\admin\Desktop\课后练习\something2.txt】中找到关键字【我】
关键字出现在第 4 行,第 个位置。
关键字出现在第 6 行,第 个位置。
关键字出现在第 7 行,第 个位置。
关键字出现在第 8 行,第 个位置。
关键字出现在第 10 行,第 个位置。
关键字出现在第 14 行,第 个位置。
================================================================
在文件【C:\Users\admin\Desktop\课后练习\rem\record2.txt】中找到关键字【我】
关键字出现在第 3 行,第 个位置。
关键字出现在第 5 行,第 个位置。
关键字出现在第 9 行,第 个位置。
关键字出现在第 10 行,第 个位置。
关键字出现在第 15 行,第 个位置。
关键字出现在第 16 行,第 个位置。
关键字出现在第 17 行,第 个位置。
关键字出现在第 30 行,第 个位置。
关键字出现在第 31 行,第 个位置。
我这么写,结果是这样的
请将该脚本放于待查找的文件夹内,请输入关键字:我
请问是否需要打印关键字【我】在文件中的具体位置(YES/NO):YES
=================================================================================
在文件【record2.txt】中找到关键字【我】
关键字出现在第3行,第[]个位置
关键字出现在第5行,第[]个位置
关键字出现在第9行,第[]个位置
关键字出现在第10行,第[]个位置
关键字出现在第15行,第[]个位置
关键字出现在第16行,第[]个位置
关键字出现在第17行,第[]个位置
关键字出现在第30行,第[]个位置
关键字出现在第31行,第[]个位置
=================================================================================
在文件【something2.txt】中找到关键字【我】
关键字出现在第4行,第[]个位置
关键字出现在第6行,第[]个位置
关键字出现在第7行,第[]个位置
关键字出现在第8行,第[]个位置
关键字出现在第10行,第[]个位置
关键字出现在第14行,第[]个位置
=================================================================================
在文件【record2.txt】中找到关键字【我】
关键字出现在第3行,第[]个位置
关键字出现在第5行,第[]个位置
关键字出现在第9行,第[]个位置
关键字出现在第10行,第[]个位置
关键字出现在第15行,第[]个位置
关键字出现在第16行,第[]个位置
关键字出现在第17行,第[]个位置
关键字出现在第30行,第[]个位置
关键字出现在第31行,第[]个位置
>>>
又或者这么写
for one_file in txt_file:            
      pos_dict = pos_word(one_file,key_word)
      if pos_dict:
            print("=================================================================================")
            print("在文件【%s%s】中找到关键字【%s】"%(root,one_file,key_word))
            if choice in ['YES', 'Yes', 'yes']:
                print_pos(pos_dict)
结果是这样的,
请将该脚本放于待查找的文件夹内,请输入关键字:我
请问是否需要打印关键字【我】在文件中的具体位置(YES/NO):YES
=================================================================================
在文件【.\remrecord2.txt】中找到关键字【我】
关键字出现在第3行,第[]个位置
关键字出现在第5行,第[]个位置
关键字出现在第9行,第[]个位置
关键字出现在第10行,第[]个位置
关键字出现在第15行,第[]个位置
关键字出现在第16行,第[]个位置
关键字出现在第17行,第[]个位置
关键字出现在第30行,第[]个位置
关键字出现在第31行,第[]个位置
=================================================================================
在文件【.\remsomething2.txt】中找到关键字【我】
关键字出现在第4行,第[]个位置
关键字出现在第6行,第[]个位置
关键字出现在第7行,第[]个位置
关键字出现在第8行,第[]个位置
关键字出现在第10行,第[]个位置
关键字出现在第14行,第[]个位置
=================================================================================
在文件【.\remrecord2.txt】中找到关键字【我】
关键字出现在第3行,第[]个位置
关键字出现在第5行,第[]个位置
关键字出现在第9行,第[]个位置
关键字出现在第10行,第[]个位置
关键字出现在第15行,第[]个位置
关键字出现在第16行,第[]个位置
关键字出现在第17行,第[]个位置
关键字出现在第30行,第[]个位置
关键字出现在第31行,第[]个位置
>>>
问题在哪里呢

莫待无花空折枝 发表于 2020-5-26 13:08:36

莫待无花空折枝 发表于 2020-5-26 13:04
小甲鱼 这一步就能打印

我这么写,结果是这样的


#第一步输入关键字与选择
#第二步找到所有txt文件
#第三步在txt文件中逐行查找关键字,并找到出现的行数和每行出现的位置
#第四步按格式打印
import os
def find_word(key_word,choice):
      
    txt_file = []    #用来储存找到的txt文件
    for root,dirs,files in os.walk(os.curdir):#遍历当前工作目录下的所有子目录,返回一个三元组
      for each_file in files:
            ext = os.path.splitext(each_file)   #分割出每个文件的后缀名
            if ext == ".txt":
                txt_file.append(each_file)

   
    for one_file in txt_file:            
      pos_dict = pos_word(one_file,key_word)
      if pos_dict:
            print("=================================================================================")
            print("在文件【%s】中找到关键字【%s】"%(one_file,key_word))
            if choice in ['YES', 'Yes', 'yes']:
                print_pos(pos_dict)


def pos_word(one_file,key_word):   #在txt文件中逐行查找关键字
    f = open(one_file)
    count = 0                  #统计行数,并且行与每行出现位置一一对应,所以引入字典来存储
    pos_dict = dict()
    for each_line in f:
      count += 1
      if key_word in each_line:
            pos_dict = pos(each_line,key_word)

    f.close()
    return pos_dict

def pos(each_line,key_word):
    pos = []
    begin = each_line.find(key_word)   #检测关键字是否在字符串中,如果在则返回索引值,否则返回-1
    while begin != -1:               #关键字在字符串中时,迭代找每行出现的位置
      pos.append(begin+1)          #人从第一个位置找
      begin = each_line.find(key_word,begin+1)   #在该行从下一个位置继续找
    return pos

def print_pos(pos_dict):
    for one_key in pos_dict.keys():
      print("关键字出现在第%s行,第[%s]个位置"%(one_key,pos_dict))

key_word = input("请将该脚本放于待查找的文件夹内,请输入关键字:")
choice = input("请问是否需要打印关键字【%s】在文件中的具体位置(YES/NO):"%key_word)
find_word(key_word,choice)

Twilight6 发表于 2020-5-26 13:17:20

莫待无花空折枝 发表于 2020-5-26 13:08


print("在文件【%s】中找到关键字【%s】" % (os.getcwd()+os.sep+one_file, key_word)) 这样试试看

下面这个也改下:
print("关键字出现在第%s行,第[%s]个位置" % (one_key, pos_dict))

莫待无花空折枝 发表于 2020-5-26 13:40:40

Twilight6 发表于 2020-5-26 13:17
这样试试看

下面这个也改下:

大佬 你说的第一个我试过,打印出来为
请将该脚本放于待查找的文件夹内,请输入关键字:我
请问是否需要打印关键字【我】在文件中的具体位置(YES/NO):YES
=================================================================================
在文件【C:\Users\admin\Desktop\课后练习\record2.txt】中找到关键字【我】
关键字出现在第3行,第[]个位置
关键字出现在第5行,第[]个位置
关键字出现在第9行,第[]个位置
关键字出现在第10行,第[]个位置
关键字出现在第15行,第[]个位置
关键字出现在第16行,第[]个位置
关键字出现在第17行,第[]个位置
关键字出现在第30行,第[]个位置
关键字出现在第31行,第[]个位置
=================================================================================
在文件【C:\Users\admin\Desktop\课后练习\something2.txt】中找到关键字【我】
关键字出现在第4行,第[]个位置
关键字出现在第6行,第[]个位置
关键字出现在第7行,第[]个位置
关键字出现在第8行,第[]个位置
关键字出现在第10行,第[]个位置
关键字出现在第14行,第[]个位置
=================================================================================
在文件【C:\Users\admin\Desktop\课后练习\record2.txt】中找到关键字【我】
关键字出现在第3行,第[]个位置
关键字出现在第5行,第[]个位置
关键字出现在第9行,第[]个位置
关键字出现在第10行,第[]个位置
关键字出现在第15行,第[]个位置
关键字出现在第16行,第[]个位置
关键字出现在第17行,第[]个位置
关键字出现在第30行,第[]个位置
关键字出现在第31行,第[]个位置
>>>
问题是record.txt文件有两个 ,有一个在子目录里,没有打印出来
第二个不用改,因为题目是要求打印一行里关键字出现的所有位置而不是第一个位置

Twilight6 发表于 2020-5-26 13:42:33

莫待无花空折枝 发表于 2020-5-26 13:40
大佬 你说的第一个我试过,打印出来为

问题是record.txt文件有两个 ,有一个在子目录里,没有打印出来 ...

第二个你理解错了 第二个你没改 你打印的结果是两个中括号你没发现嘛

或者你把字符串里面的 [] 去了

莫待无花空折枝 发表于 2020-5-26 13:44:12

Twilight6 发表于 2020-5-26 11:06
没点回复我刚刚都没看见你发我消息

我不知道是不是我用的微软浏览器的缘故每一次刷新才能显示有新的消息提醒所以你每一次回复问题 我都回答的有点慢{:10_312:}

Twilight6 发表于 2020-5-26 13:45:01

莫待无花空折枝 发表于 2020-5-26 13:40
大佬 你说的第一个我试过,打印出来为

问题是record.txt文件有两个 ,有一个在子目录里,没有打印出来 ...

你开始没说清楚问题啊全部都是我自己找异同点找出来的我也没观察那么 仔细 看到路径问题我只看到你的没打印路径 我以为你问的是这个问题。。。下次请描述好问题

莫待无花空折枝 发表于 2020-5-26 13:45:19

Twilight6 发表于 2020-5-26 13:42
第二个你理解错了 第二个你没改 你打印的结果是两个中括号你没发现嘛

或者你把字符串里面的 [] 去 ...

对对对   害

莫待无花空折枝 发表于 2020-5-26 13:46:40

Twilight6 发表于 2020-5-26 13:45
你开始没说清楚问题啊全部都是我自己找异同点找出来的我也没观察那么 仔细 看到路径问题我只看到你 ...

好的 好的 好的{:10_254:}
页: [1]
查看完整版本: 零基础python-关键字查找