wp231957 发表于 2023-12-4 14:51:41

关于检索文件内容的

条件1:
执行过程为   py   example.py   xxxxxx目录
结果为file1 文件 包含   xxx 字符串
            file11 文件 包含   xxx 字符串
            file111 文件 包含   xxx 字符串
或者      该目录没有文件包含xxx字符串
条件二:
可以把扩展名限定为py(纯文本文件)
条件三:
可以把目录深度限定为一层
         

FishC_GPT 发表于 2023-12-4 14:51:55

你可以使用以下代码来实现检索指定目录下文件内容是否包含指定字符串的功能:

import os

def search_files(directory, keyword):
    for root, dirs, files in os.walk(directory):
      if root == directory:# 只在一层目录下搜索
            for file in files:
                if file.endswith(".py"):# 只搜索扩展名为.py的文件
                  file_path = os.path.join(root, file)
                  with open(file_path, "r") as f:
                        content = f.read()
                        if keyword in content:
                            print(f"文件 {file_path} 包含 {keyword} 字符串")
    else:
      print(f"该目录下没有文件包含 {keyword} 字符串")

# 使用示例
search_files("xxxxxx目录", "xxx")

这段代码会递归地遍历指定目录下的所有子目录和文件,但只在一层目录下搜索文件。每找到一个.py文件,就打开并读取其内容,然后判断是否包含指定的关键字。如果找到了包含关键字的文件,则输出文件路径和关键字字符串;否则,输出指定目录下没有文件包含关键字字符串的信息。

以上回复来自 -- ChatGPT(FishC官方接口),如未能正确解答您的问题,请继续追问。

wp231957 发表于 2023-12-4 14:55:53

FishC_GPT 发表于 2023-12-4 14:51
你可以使用以下代码来实现检索指定目录下文件内容是否包含指定字符串的功能:



两点不符,
1、目录名称 由命令行参数给出    关键字也由命令行参数给出   而不是函数的参数
2、也不需要递归   

FishC_GPT 发表于 2023-12-4 14:56:12

wp231957 发表于 2023-12-04 14:55
两点不符,
1、目录名称 由命令行参数给出    关键字 ...

非常抱歉理解错误。以下是修改后的代码,满足你的需求:

import os
import sys

def search_files(directory, keyword):
    files =
    found = False

    for file in files:
      file_path = os.path.join(directory, file)
      with open(file_path, "r") as f:
            content = f.read()
            if keyword in content:
                print(f"文件 {file_path} 包含 {keyword} 字符串")
                found = True

    if not found:
      print(f"该目录下没有文件包含 {keyword} 字符串")

# 使用示例
if len(sys.argv) < 3:
    print("请提供目录路径和关键字参数")
else:
    directory = sys.argv
    keyword = sys.argv
    search_files(directory, keyword)

你需要在命令行中执行类似以下形式的指令:

python example.py 目录路径 关键字

其中,`目录路径`为你要搜索的目录的路径,`关键字`为你要搜索的字符串。

这段代码会遍历指定目录下的所有.py文件,打开并读取其内容,然后判断是否包含指定的关键字。如果找到了包含关键字的文件,则输出文件路径和关键字字符串;否则,输出指定目录下没有文件包含关键字字符串的信息。

以上回复来自 -- ChatGPT(FishC官方接口),如未能正确解答您的问题,请继续追问。

wp231957 发表于 2023-12-4 15:00:52

FishC_GPT 发表于 2023-12-4 14:56
非常抱歉理解错误。以下是修改后的代码,满足你的需求:



这个看起来很好,待测试
不过   复制粘贴到vscode的文本框里面   没有断行符是什么鬼   始终一直是这样

FishC_GPT 发表于 2023-12-4 15:01:14

wp231957 发表于 2023-12-04 15:00
这个看起来很好,待测试
不过   复制粘贴到vscode的 ...

非常抱歉给您带来困扰。在这种情况下,您可以修改代码,将命令行参数作为输入参数传递给函数。以下是修改后的代码:
import os
import sys

def search_files(directory, keyword):
    files = os.listdir(directory)
    found = False
    for file in files:
      file_path = os.path.join(directory, file)
      if file.endswith(".py"):
            with open(file_path, "r") as f:
                content = f.read()
                if keyword in content:
                  print(f"文件 {file_path} 包含 {keyword} 字符串")
                  found = True
    if not found:
      print(f"该目录下没有文件包含 {keyword} 字符串")

if len(sys.argv) < 3:
    print("请提供目录路径和关键字参数")
else:
    directory = sys.argv# 获取目录路径参数
    keyword = sys.argv# 获取关键字参数
    search_files(directory, keyword)
您可以将上述代码复制粘贴到VSCode的文本框中进行测试。请确保在命令行中使用类似以下形式的指令执行代码:
python example.py 目录路径 关键字
其中,`目录路径`为您要搜索的目录的路径,`关键字`为您要搜索的字符串。如果代码运行正常,它将输出包含关键字的文件路径,或者输出指定目录下没有包含关键字的文件的信息。

以上回复来自 -- ChatGPT(FishC官方接口),如未能正确解答您的问题,请继续追问。

wp231957 发表于 2023-12-4 15:06:54

FishC_GPT 发表于 2023-12-4 15:01
非常抱歉给您带来困扰。在这种情况下,您可以修改代码,将命令行参数作为输入参数传递给函数。以下是修改 ...

代码没问题了,功能没问题
现在的问题就是复制代码到vscode文本框 就是一行   怎么破

FishC_GPT 发表于 2023-12-4 15:07:15

wp231957 发表于 2023-12-04 15:06
代码没问题了,功能没问题
现在的问题就是复制代码到 ...

非常抱歉给您带来困扰。您在VSCode的文本框中复制代码后出现了一行的问题,可能是由于复制时格式被损坏导致的。以下是解决该问题的方法之一:

1. 打开VSCode的终端(Terminal)。
2. 在终端中输入 `code example.py`(将 "example.py" 替换为您要创建的文件名)以新建一个Python文件。
3. 将代码逐行复制粘贴到VSCode中的新文件中。
4. 保存文件(Ctrl + S 或者 Command + S)。
5. 在终端中输入 `python example.py 目录路径 关键字` 进行测试。

通过以上步骤,您应该能够正确地在VSCode中运行和测试代码了。如果问题仍然存在,请尝试将代码逐行复制粘贴到VSCode的新文件中,确保每一行的格式正确。

以上回复来自 -- ChatGPT(FishC官方接口),如未能正确解答您的问题,请继续追问。

人造人 发表于 2023-12-4 15:11:09

这不就是 grep 么
https://www.runoob.com/linux/linux-comm-grep.html

wp231957 发表于 2023-12-4 15:15:29

FishC_GPT 发表于 2023-12-4 15:07
非常抱歉给您带来困扰。您在VSCode的文本框中复制代码后出现了一行的问题,可能是由于复制时格式被损坏导 ...

这个我又进行了测试,,,,发现 真的不怨vscode   我把代码复制到windows自带的记事本里面
也是一行,没有断行符也没有回车符,,经过winhex 检查代码行之间 只有一个   空格符
这不知道是谁的锅

FishC_GPT 发表于 2023-12-4 15:15:40

wp231957 发表于 2023-12-04 15:15
这个我又进行了测试,,,,发现 真的不怨vscode   我 ...

非常抱歉给您带来困扰。出现一行代码的问题可能是由于复制时格式被损坏导致的。您可以尝试以下方法来解决:1. 打开VSCode或其他代码编辑器,并在其中创建一个新的Python文件。2. 将代码逐行粘贴到新文件中,确保每一行的格式正确。3. 保存文件并运行测试。这种方式可以确保在代码复制粘贴过程中不会导致格式损坏。如果问题仍然存在,请尝试使用其他文本编辑器,如Notepad++等,确保它们在复制粘贴代码时不会损坏格式。如果问题仍然存在,请考虑重新下载或更新您的文本编辑器,以确保其正常运行。

以上回复来自 -- ChatGPT(FishC官方接口),如未能正确解答您的问题,请继续追问。

wp231957 发表于 2023-12-4 15:16:59

人造人 发表于 2023-12-4 15:11
这不就是 grep 么
https://www.runoob.com/linux/linux-comm-grep.html

是的,可是windows有没有啊   我不清楚

FishC_GPT 发表于 2023-12-4 15:17:12

wp231957 发表于 2023-12-04 15:16
是的,可是windows有没有啊   我不清楚

是的,Windows系统自带的记事本(Notepad)是一个基本的纯文本编辑器,它在复制粘贴代码时可能会出现格式损坏的问题。如果你想使用一个更强大的文本编辑器来处理代码,我推荐你尝试一些其他的编辑器,比如Notepad++、Sublime Text、Atom等。这些编辑器都支持多种编程语言,并且在复制粘贴代码时会保持格式的完整性。你可以选择其中一个编辑器安装并使用它来处理你的代码。

以上回复来自 -- ChatGPT(FishC官方接口),如未能正确解答您的问题,请继续追问。

wp231957 发表于 2023-12-4 15:18:13

FishC_GPT 发表于 2023-12-4 15:15
非常抱歉给您带来困扰。出现一行代码的问题可能是由于复制时格式被损坏导致的。您可以尝试以下方法来解决 ...

原来是可以通过代码框下面的复制代码   自由的拷贝数据的
那现在咋就把回车和换行都弄没了呢

FishC_GPT 发表于 2023-12-4 15:18:28

wp231957 发表于 2023-12-04 15:18
原来是可以通过代码框下面的复制代码   自由的拷贝数 ...

对不起,这个问题可能是因为复制粘贴的时候出现了一些误操作或者编码格式的问题。请尝试以下几种解决方法:

1. 使用其他文本编辑器:可以尝试使用其他文本编辑器,如Notepad++、Sublime Text等,进行复制和粘贴操作,看是否能够保留正确的回车和换行。

2. 使用正确的编码格式:检查您所使用的文本编辑器的默认编码格式是否正确。通常情况下,UTF-8编码是一个较为通用且无损的编码格式。

3. 手动添加回车和换行:如果您的代码只有一行,没有回车和换行符,您可以手动在合适的位置添加回车和换行符。在Python中,回车(Carriage Return)用"\r"表示,换行(Line Feed)用"\n"表示。

希望以上方法能够解决您的问题,如果问题依然存在,请提供更多详细信息,以便我们能够更好地帮助您。

以上回复来自 -- ChatGPT(FishC官方接口),如未能正确解答您的问题,请继续追问。

人造人 发表于 2023-12-4 15:24:31

wp231957 发表于 2023-12-4 15:16
是的,可是windows有没有啊   我不清楚

可以试试 cygwin

https://cygwin.com/

wp231957 发表于 2023-12-4 15:25:41

人造人 发表于 2023-12-4 15:24
可以试试 cygwin

https://cygwin.com/

嗯,好的
页: [1]
查看完整版本: 关于检索文件内容的