首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >上期答案

上期答案

作者头像
张树臣
发布2018-05-15 16:55:42
6480
发布2018-05-15 16:55:42
举报
#   编写一个程序,用户输入关键字,查找当前文件内
# (如果当前文件夹内含有文件夹,则进入文件夹继续搜索)所有含有该关键字的文本文件
#   要求显示该文件所在的位置,以及关键字在本文中的位置(第几行、第几个字符)


import os

#查找文件
def search_file(filepath):
    all_files = os.walk(filepath) # 遍历top路径以下所有的子目录,返回一个三元组:(路径, [包含目录], [包含文件])
    list_txt_file = []# 存放txt格式的文件
    # 找到全部的文本文件
    for each_one in all_files:
        for each_file in each_one[2]:
            if os.path.splitext(each_file)[1] in ('.txt', '.TXT') :
                list_txt_file.append(os.path.join(each_one[0]+os.sep+each_file))
                #list_txt_file.append(os.path.join(os.getcwd() + os.sep + each_file))

    return list_txt_file

#查找关键字
def find_target(file, target):
    # 定义一个字典保存关键字在第几行和所在行的位置
    key_dict = dict()
    # 记录行数
    count = 0
    f = open(file)
    for each_line in f:
        count+=1
        #如果在某一行找到关键字,继续查找其位置
        if target in each_line:
            #定义位置
            position=[]
            # Python find() 方法检测字符串中是否包含子字符串 str ,如果指定 beg(开始) 和 end(结束) 范围,
            # 则检查是否包含在指定范围内,如果包含子字符串返回开始的索引值,否则返回-1。
            begin=each_line.find(target)
            while begin != -1:
                position.append(begin + 1)#用户角度是从1开始
                begin=each_line.find(target,begin+1 ) #从下一个位置继续查找
            key_dict[count]=position

    f.close()
    return key_dict


#打印关键字
def print_target(list_txt_file,target):
    for each_file in list_txt_file:
        key_dict=find_target(each_file,target)
        if key_dict:
            print('-----------------------------------')
            print('在文件【%s】中找到关键字【%s】'%(each_file, target))

        keys=key_dict.keys()
        keys=sorted(keys) #由于字典是无序的,这里对行数进行排序
        for each_key in keys:
            print('关键字出现在第%d行第%s个位置!'%(each_key,key_dict[each_key]))


target=input('输入您要查找的字符: ')
filepath=input('您要在哪个路径下进行搜索: ')
list_txt_file = search_file(filepath)

print_target(list_txt_file,target)
本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2018-01-21,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 软件测试经验与教训 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档