鱼C论坛

 找回密码
 立即注册
查看: 2481|回复: 10

[已解决]程序不运行,不知道问题出在哪里?

[复制链接]
发表于 2021-7-26 18:30:51 | 显示全部楼层 |阅读模式

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

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

x
感觉这个作业超难!我写出来的程序无法运行,找不出毛病在哪里,只好过来请教群里的高手:

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


程序如下:

def search_keywords(file_path,key_words):

    """search for key words in certain file, pointing\
out the number of line and position"""

    import os

    all_file = os.listdir(file_path)

    pickup_file = []

    for each in all_file:


        if os.path.isfile(each):

            if os.path.splitext(each)[1] == '.txt':

               

                f = open(each)

                row_count = 0

                if key_words in f:

                    pickup_file.append(os.path.join(os.getcwd(),each))

                    print('在文件%s中找到关键字【%s】'% (join(os.getcwe(),each),key_words))

                    for each_line in f:

                        row_count += 1

                        position = dict()

                        if key_words in each_line:

                            key_pos = each_line.find(key_words)+1

                            while key_pos != -1:

                                position[row_count] = key_pos

                                key_pos = each_line.find(key_words,key_pos - 1)+1

                           

                        print('关键字出现在第%s行,第%s个位置'%(row_count,position[row_count]))

                        

                        

                f.close()

        else:

            search_keywords(each, key_words)

            os.chdir(os.pardir)
            
file_path = input('请输入要查找的文件路径:')
key_words = input('请输入要查找的关键字:')
search_keywords(file_path,key_words)

可是每次运行程序都没结果:

请输入要查找的文件路径:D:\\Practice\\临时文件
请输入要查找的关键字:小甲鱼
>>>
最佳答案
2021-7-29 07:50:38
本帖最后由 叼辣条闯世界 于 2021-7-31 12:30 编辑
global file_hz,position
def search_keywords(file_path,key_words):
    row_count = 0
    """search for key words in certain file, pointing\
out the number of line and position"""

    import os

    os.chdir(file_path)
    all_file=os.listdir()

    pickup_file = []

    for each in all_file:


        if os.path.isfile(each):
            file_hz = os.path.splitext(each)
            if file_hz[1] == '.txt':
                try:
                    f = open(each,encoding='gb18030')
                    file_read = f.read()
                except:
                    f = open(each,encoding='utf8')
                    file_read = f.read()
                row_count = 0

                if key_words in file_read:
                    position = dict()
                    pickup_file.append(os.path.join(os.getcwd(),each))

                    print('在文件' + each + '中找到关键字:%s'%key_words)
                    f.seek(0,0)
                    file_get_lines = int(len(f.readlines()))
                    f.seek(0,0)
                    for i in range(file_get_lines):

                        
                        
                        file_readlines = f.readline()
                        if key_words in file_readlines:
                            row_count += 1
                            key_pos = file_readlines.find(key_words)+1
                            #while key_pos != -1:
                                
                                

                            key_pos = file_readlines.find(key_words)+1
                            print('关键字出现在第%s行,第%s个位置'%(row_count,key_pos))
                            #break
                        else:
                            row_count += 1
                    
    
                        

                        

                

        else:

            search_keywords(each, key_words)

            os.chdir(os.pardir)
            
file_path = input('请输入要查找的文件路径:')
key_words = input('请输入要查找的关键字:')
search_keywords(file_path,key_words)

input('任意键退出')
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2021-7-27 12:00:06 | 显示全部楼层
有没有高手啊?这个感觉不是一般水平能搞定的
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-7-27 15:03:40 | 显示全部楼层

我也是初学者,暂时还看不出代码问题出在哪里,但是运行时显示:FileNotFoundError: [WinError 3] 系统找不到指定的路径。_ '$RECYCLE.BIN'
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-7-27 15:06:43 | 显示全部楼层
print('在文件%s中找到关键字【%s】'% (join(os.getcwe(),each),key_words))这行代码的括号不是英文的
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-7-27 15:30:57 | 显示全部楼层
本帖最后由 阿奇_o 于 2021-7-27 15:32 编辑

这道题似乎难道不少人,我在这里看到好几次了。。虽然代码没几行。。
初学对于 "路径"、"文件"、"目录","当前工作目录","权限" 等等概念,或许真的一下理解不了。

没关系,这些相关问题,最终你遇到足够多次后,你总会明白的,哈哈哈

具体代码我就不写了,论坛里我想可以搜得到。。

ps: 那个什么"找不到指定的路径。_ '$RECYCLE.BIN'",这种是Windows的特殊的垃圾回收文件(目录),
这类文件通常是隐藏的,也可能需要相应的权限,所以没必要的话,可以跳过这类文件,不对它进行搜索。

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-7-27 15:31:44 | 显示全部楼层
不会起名字的我 发表于 2021-7-27 15:06
print('在文件%s中找到关键字【%s】'% (join(os.getcwe(),each),key_words))这行代码的括号不是英文的

我重新输入一遍,应该不会错了。但是程序运行还是错误,指向第8行,就是:all_file = os.listdir(file_path) 说找不到路径。我摸不着头脑了,因为这条代码应该没错了.......
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-7-27 15:34:49 | 显示全部楼层
不会起名字的我 发表于 2021-7-27 15:06
print('在文件%s中找到关键字【%s】'% (join(os.getcwe(),each),key_words))这行代码的括号不是英文的

请输入要查找的文件路径:D:\\Practice\\临时文件
请输入要查找的关键字:小甲鱼
Traceback (most recent call last):
  File "D:\Practice\search_keywords.py", line 65, in <module>
    search_keywords(file_path,key_words)
  File "D:\Practice\search_keywords.py", line 59, in search_keywords
    search_keywords(each, key_words)
  File "D:\Practice\search_keywords.py", line 8, in search_keywords
    all_file = os.listdir(file_path)
FileNotFoundError: [WinError 3] 系统找不到指定的路径。: 'data'

然后,我试着用手工输入一下,可以找到路径的呀:

>>> import os
>>> os.listdir('D:\\Practice\\临时文件')
['data', 'exercise', 'file print.py', 'file_example.txt', 'file_reader.py', 'record.txt', 'with file.py', '升怪打级.txt', '吉晶.pptx', '安装PyTorch错误.jpg', '练习本', '量子通信核心概念股.png']
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-7-29 07:50:38 | 显示全部楼层    本楼为最佳答案   
本帖最后由 叼辣条闯世界 于 2021-7-31 12:30 编辑
global file_hz,position
def search_keywords(file_path,key_words):
    row_count = 0
    """search for key words in certain file, pointing\
out the number of line and position"""

    import os

    os.chdir(file_path)
    all_file=os.listdir()

    pickup_file = []

    for each in all_file:


        if os.path.isfile(each):
            file_hz = os.path.splitext(each)
            if file_hz[1] == '.txt':
                try:
                    f = open(each,encoding='gb18030')
                    file_read = f.read()
                except:
                    f = open(each,encoding='utf8')
                    file_read = f.read()
                row_count = 0

                if key_words in file_read:
                    position = dict()
                    pickup_file.append(os.path.join(os.getcwd(),each))

                    print('在文件' + each + '中找到关键字:%s'%key_words)
                    f.seek(0,0)
                    file_get_lines = int(len(f.readlines()))
                    f.seek(0,0)
                    for i in range(file_get_lines):

                        
                        
                        file_readlines = f.readline()
                        if key_words in file_readlines:
                            row_count += 1
                            key_pos = file_readlines.find(key_words)+1
                            #while key_pos != -1:
                                
                                

                            key_pos = file_readlines.find(key_words)+1
                            print('关键字出现在第%s行,第%s个位置'%(row_count,key_pos))
                            #break
                        else:
                            row_count += 1
                    
    
                        

                        

                

        else:

            search_keywords(each, key_words)

            os.chdir(os.pardir)
            
file_path = input('请输入要查找的文件路径:')
key_words = input('请输入要查找的关键字:')
search_keywords(file_path,key_words)

input('任意键退出')
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-7-29 10:03:31 | 显示全部楼层
本帖最后由 z5560636 于 2021-7-29 11:10 编辑

两个错误:
1.需要切换到当前目录
os.chdir(file_path)
all_file = os.listdir()

2.join的使用错误,及getcwd()的拼写错误。
print('在文件%s中找到关键字【%s】' % (os.getcwd().join(each), key_words))
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

 楼主| 发表于 2021-8-1 14:25:55 | 显示全部楼层

佩服佩服!虽然有的看不懂
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-10-24 16:08:09 | 显示全部楼层
import os


def search_file(path: str, key: str) -> bool:
    """
    The main part of the program
    search the contents of the file and print it.
    """
    global j, list_
    try:
        j = open(path, 'r', encoding="utf8")
        list_ = j.readlines()
    except UnicodeError:
        j = open(path, 'r', encoding="gbk")
        list_ = j.readlines()
    except PermissionError:
        print("[error]打开文件{0}时出现错误:PermissionError(权限不足)".format(path))
        return False
    except:
        print("[error]打开文件{0}时出线未知错误(Unknown Error)".format(path))
    j.close()
    line_num = 1
    for line in list_:
        if key not in line:
            continue
        else:
            for m in range(len(path)):
                if path[-m] == "\":
                    print("在文件{0}中找到关键字".format(path[-m + 1:]))
                    break
            num = 1
            for n in line:
                keywords = ""
                for i in range(len(key)):
                    keywords += n[i]
                if keywords == key:
                    print("关键字在第{0}行,第{1}个位置".format(line_num, num))
                num += 1
        line_num += 1
        return False


def check_file(filename: str) -> bool:
    """Check whether the file is text."""
    if filename[-3:] == "txt":
        return True
    return False


def walk_dir(root: str) -> list:
    """Get all files (including sub-files) under the folder
    and return a list."""
    all_file_list = []
    for dir_path, dir_names, file_names in os.walk(root):
        for filename in file_names:
            all_file_list.append(os.path.join(dir_path, filename))
    return all_file_list


default_path = input("输入路径:")
default_keywords = input("输入关键字:")
for i in walk_dir(default_path):
    if check_file(i):
        search_file(i, default_keywords)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-11-27 12:08

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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