Geeker_odd 发表于 2021-7-26 18:30:51

程序不运行,不知道问题出在哪里?

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

题目:编写一个程序,用户输入关键字,查找当前文件夹内(如果当前文件夹内包含文件夹,则进入文件夹继续搜索)所有含有该关键字的文本文件(.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) == '.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 = key_pos

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

                           

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

                        

                        

                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\\临时文件
请输入要查找的关键字:小甲鱼
>>>

Geeker_odd 发表于 2021-7-27 12:00:06

有没有高手啊?这个感觉不是一般水平能搞定的

XYcarpenter 发表于 2021-7-27 15:03:40


我也是初学者,暂时还看不出代码问题出在哪里,但是运行时显示:FileNotFoundError: 系统找不到指定的路径。_ '$RECYCLE.BIN'

不会起名字的我 发表于 2021-7-27 15:06:43

print('在文件%s中找到关键字【%s】'% (join(os.getcwe(),each),key_words))这行代码的括号不是英文的

阿奇_o 发表于 2021-7-27 15:30:57

本帖最后由 阿奇_o 于 2021-7-27 15:32 编辑

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

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

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

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

Geeker_odd 发表于 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) 说找不到路径。我摸不着头脑了,因为这条代码应该没错了.......

Geeker_odd 发表于 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: 系统找不到指定的路径。: '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']

叼辣条闯世界 发表于 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 == '.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('任意键退出')

z5560636 发表于 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))

Geeker_odd 发表于 2021-8-1 14:25:55

叼辣条闯世界 发表于 2021-7-29 07:50


佩服佩服!虽然有的看不懂

叼辣条闯世界 发表于 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("打开文件{0}时出现错误:PermissionError(权限不足)".format(path))
      return False
    except:
      print("打开文件{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
                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)
页: [1]
查看完整版本: 程序不运行,不知道问题出在哪里?