鱼C论坛

 找回密码
 立即注册
查看: 766|回复: 2

[已解决]第30课第4题

[复制链接]
发表于 2020-6-10 02:05:52 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
题目:编写一个程序,用户输入关键字,查找当前文件夹内(如果当前文件夹内包含文件夹,则进入文件夹继续搜索)所有含有该关键字的文本文件(.txt后缀),要求显示该文件所在的位置以及关键字在文件中的具体位置(第几行第几个字符)。
import os

def search(path, key,decide):
    os.chdir(path)
    list1 = os.listdir(os.curdir)
    for each_file in list1:
        if os.path.isdir(each_file):
            search(each_file, key,decide)
            os.chdir(os.pardir)
            
        i = os.path.splitext(each_file)
        if i[1] == '.txt':
            with open(each_file) as f:
                
                f_path = os.getcwd() + os.sep + each_file
                row = 0
                if key in f.read():
                    print('===================================================')
                    print('在文件【%s】中找到关键字【%s】' % (f_path, key))
                if decide.upper() == 'YES':
                    pos = dict()   #pos用来存放key的位置信息
                    for each_line in f:
                        row += 1
                        column_list = [] #用来存放每行含key的所有列
                        column = each_line.find(key) + 1
                        if column == 0:
                            continue
                        while column != 0:
                            column_list.append(column)
                            column = each_line.find(key,column) + 1
                            
                        pos[row] = column_list
                        print('关键字出现在第 %d 行,第 %s 个位置。' % (row,str(column_list)))
                       




1.jpg



path = os.getcwd()
key = input('请将该脚本放于待查找的文件夹内,请输入关键字:')
decide = input('请问是否需要打印关键字【%s】在文件中的具体位置(YES/NO):' % key)
search(path, key,decide)



可以看到我的结果里并没有显示包含关键字的文件中关键字具体在第几行第几列,我想问代码哪里出错了?
最佳答案
2020-6-10 04:31:26
import os

def search(path, key,decide):
    os.chdir(path)
    list1 = os.listdir(os.curdir)
    for each_file in list1:
        if os.path.isdir(each_file):
            search(each_file, key,decide)
            os.chdir(os.pardir)
            
        i = os.path.splitext(each_file)
        if i[1] == '.txt':
            with open(each_file) as f:
                
                f_path = os.getcwd() + os.sep + each_file
                row = 0
                if key in f.read():                                                    #<---read()后文件指针指向文件尾
                    print('===================================================')
                    print('在文件【%s】中找到关键字【%s】' % (f_path, key))
                if decide.upper() == 'YES':
                    pos = dict()   #pos用来存放key的位置信息
                    f.seek(0)                               #<--加一句,把文件指针复位到开始                                                                
                    for each_line in f:                  #<---如果不调整文件指针,指针在尾部,这段循环不会被执行,后面也不会被打印
                        row += 1
                        column_list = [] #用来存放每行含key的所有列
                        column = each_line.find(key) + 1
                        if column == 0:
                            continue
                        while column != 0:
                            column_list.append(column)
                            column = each_line.find(key,column) + 1
                            
                        pos[row] = column_list
                        print('关键字出现在第 %d 行,第 %s 个位置。' % (row,str(column_list)))
 
path = os.getcwd()
key = input('请将该脚本放于待查找的文件夹内,请输入关键字:')
decide = input('请问是否需要打印关键字【%s】在文件中的具体位置(YES/NO):' % key)
search(path, key,decide)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-6-10 04:31:26 | 显示全部楼层    本楼为最佳答案   
import os

def search(path, key,decide):
    os.chdir(path)
    list1 = os.listdir(os.curdir)
    for each_file in list1:
        if os.path.isdir(each_file):
            search(each_file, key,decide)
            os.chdir(os.pardir)
            
        i = os.path.splitext(each_file)
        if i[1] == '.txt':
            with open(each_file) as f:
                
                f_path = os.getcwd() + os.sep + each_file
                row = 0
                if key in f.read():                                                    #<---read()后文件指针指向文件尾
                    print('===================================================')
                    print('在文件【%s】中找到关键字【%s】' % (f_path, key))
                if decide.upper() == 'YES':
                    pos = dict()   #pos用来存放key的位置信息
                    f.seek(0)                               #<--加一句,把文件指针复位到开始                                                                
                    for each_line in f:                  #<---如果不调整文件指针,指针在尾部,这段循环不会被执行,后面也不会被打印
                        row += 1
                        column_list = [] #用来存放每行含key的所有列
                        column = each_line.find(key) + 1
                        if column == 0:
                            continue
                        while column != 0:
                            column_list.append(column)
                            column = each_line.find(key,column) + 1
                            
                        pos[row] = column_list
                        print('关键字出现在第 %d 行,第 %s 个位置。' % (row,str(column_list)))
 
path = os.getcwd()
key = input('请将该脚本放于待查找的文件夹内,请输入关键字:')
decide = input('请问是否需要打印关键字【%s】在文件中的具体位置(YES/NO):' % key)
search(path, key,decide)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-6-10 07:59:22 | 显示全部楼层

非常感谢。基础还是没掌握好,这问题困扰了我好久。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-1-20 19:26

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表