鱼C论坛

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

文件的课后作业第4题

[复制链接]
发表于 2021-4-20 15:29:38 | 显示全部楼层 |阅读模式

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

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

x
import os
dict1 = {}
line = 0
position = 0
list1 = []
def search_file(keyword, confirm):
    
    if confirm == 'YES':
        for each in os.listdir(os.curdir):
            line = 0                            #初始化行数,列表,位置
            list1.clear()
            position = 0
            
            if os.path.isdir(each):             #递归判断是否是目录,并返回上一级目录
                search_file(keyword,confirm)
                os.chdir(os.pardir)
                
            f = open(os.getcwd()+os.sep+each)    #打开文件,判断keyword是否存在文档中
           i f os.path.splitext(each)[1] == '.txt' and keyword in f.read():
                print('在文件【%s】中找到关键字【%s】'%(each,keyword))
                
                for each_line in f:           #逐行判断在哪,并存储位置
                    line += 1
                    if keyword in each_line:
                        while keyword in each_line[position:]:          #多个关键词要用到列表
                            position += each_line[position:].index(keyword)
                            list1.append(position)
                        dict1.setdefault(line,list1)                     #存到字典中
                print('关键字出现在第%s行,第%s个位置'%(dict1.keys(),dict1.values()))
            f.close()

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

题目大意:找到在py文件所在目录下(遍历所有目录)的所有txt文件里的输入的关键词并返回行数和位置
卡在了递归那行,无限重复同样的两个print
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2021-4-20 20:23:53 | 显示全部楼层
不知道是不是缩进问题,哈哈哈
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-4-20 22:38:07 | 显示全部楼层
搞了一堆,现在变成不输出位置了,无论怎么都没有,这从文件里读取出来的好像不是字符串,不能用in判断,只会返回空值
for each_line in f:
                        line += 1
                        if keyword in each_line:
                            while keyword in each_line[position:]:
                                position += each_line[position:].index(keyword)
                                list1.append(position)
                            dict1.setdefault(line,list1)
                            print('关键字出现在第%s行,第%s个位置'%(dict1.keys(),dict1.values()))
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-1-16 01:42

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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