针对需求,逐一提问,AIGC给出了准确有效的答案,如果一个完整的需求提给AIGC呢?
另:有了这样的提问?还有多少需要手工调整呢?
需求:给定目录 -- 需求持续补充中
1)统计该目录及子目录下文件类型(以后缀区分)、文件数量(文件及文件夹、总量及不同类型数量)、绘制目录结构
2)给定关键字,判断目录下文件是否包含该关键字:如果包含,输出该文件名、关键字个数、所处位置(行)
。。。。。。。
9)程序打包成 EXE 文件供外部使用
逐一提问:
提问1:python 查看目录及子目录文件列表
提问2:python 判断文件后缀名
提问3:python 判断当前文件后缀名是什么
提问4:python 将不同后缀的文件名放入字典中并统计数据
提问5:python,读取文件并判断文件中是否包含某个字段
提问6:python,读取 doc 文件
提问7:python,读取 excel 文件
提问8:python,读取 pdf 文件
提问9:python,读取 txt 文件
提问10:python 使用xlrd xlwt读取office文件
完整需求提问
提问:使用python,编码完成以下需求
0. 文件声明:
- #********************************************************************
- # Copyright (c) 2024,LeiXun Studio
- # All Rights Reserved.
- #
- # File Name: fileCheck.py
- # Summary: check files in folder: count and content
- #
- # @Version: 0.1
- # @Author: Roy
- # @Start Date: 2024/5/12
- #*********************************************************************
1. 提示输入要统计的文件目录,变量名: folderPath
2. 输出当前文件夹下所有子文件夹及文件列表,内容存在列表 fileList中,并输出文件数量,使用变量filecount
3. 以文件后缀为区分,输入文件类型及对应的文件数量
4. 输入要查找的字符串,变量名:querystr
5. 在后缀为 txt, doc, excel, pdf文的文件中查找要查询的字符串,并输入对应的 文件名 及 查找字符串的数量,存在变量:strfile中
>> 对比 CSDN创作助手 和 文心一言的输出
- 都能较完整的输出需求所提问问题答案
- 变量名,CSDN使用了驼峰命名法;文心一言使用原样
- 提问:均以问题描述为基础进行备注,CSDN进行改造,复杂问题进行拆分;文心一言原样使用,添加了说明
- 文件:CSDN在文件解析时只对标准文件进行了处理,异常未捕捉;文心一主更完善一些,特别是对于非标准库内容进行了必要的说明,对异常进行了容错处理
| 提问主题 | CSDN创作助手 | 文心一言 |
| 0. 文件声明 | 无输出 | 无输出,但提示:文件头部声明 ...(保持原样) |
| 1. 提示输入要统计的文件目录,变量名: folderPath | 1. 提示并正确接收输入参数 2. 变量名使用正确 | 1. 提示并正确接收输入参数 2. 变量名使用正确 |
| 2. 输出当前文件夹下所有子文件夹及文件列表,内容存在列表 fileList中,并输出文件数量,使用变量filecount | 1. 文件列表内容输出正确 2. 文件数量输出正确 3. 变量名使用正确 | 1. 文件列表内容输出正确 2. 文件数量输出正确 3. 变量名使用正确 |
| 3. 以文件后缀为区分,输入文件类型及对应的文件数量 | 1. 文件后缀识别正确 2. 不同后缀文件数量输出正确 | 1. 文件后缀识别正确 2. 不同后缀文件数量输出正确 |
| 4. 输入要查找的字符串,变量名:querystr | 1. 提示并正确接收输入参数 2. 变量名使用正确 | 1. 提示并正确接收输入参数 2. 变量名使用正确 |
| 5. 在后缀为 txt, doc, excel, pdf文的文件中查找要查询的字符串,并输入对应的 文件名 及 查找字符串的数量,存在变量:strfile中 | 1. 错误提示 UnicodeDecodeError: 'gbk' codec can't decode byte 0x8e in position 18: illegal multibyte sequence 2. 调整代码添加 encoding后,仍报错,原因:不同类型使用的读取方法,需使用不同库 3. 对文件类型限定进行了判断 | 1. 错误处理:encoding='utf-8', errors='ignore' 2. 对 doc, excel, pdf 特殊文件进行了说明:使用相应的库,并给出了特别说明 3. 对文件类型限定进行了判断 |
- import os
-
- # 输入文件目录
- folderPath = input("请输入要统计的文件目录:")
-
- # 统计文件数量和输出文件列表
- fileList = []
- fileCount = 0
-
- # 遍历文件夹及其子文件夹
- for root, dirs, files in os.walk(folderPath):
- # 输出当前文件夹下的文件列表
- for file in files:
- fileCount += 1
- fileList.append(os.path.join(root, file))
- print(os.path.join(root, file))
-
- # 输出文件数量
- print("文件数量:", fileCount)
-
- # 统计文件类型及数量
- fileTypeCount = {}
- for file in fileList:
- # 获取文件后缀
- fileExtension = os.path.splitext(file)[1][1:].lower()
- if fileExtension in fileTypeCount:
- fileTypeCount[fileExtension] += 1
- else:
- fileTypeCount[fileExtension] = 1
-
- # 输出文件类型及数量
- print("文件类型及数量:")
- for fileType, count in fileTypeCount.items():
- print(fileType, ":", count)
-
- # 输入要查找的字符串
- queryStr = input("请输入要查找的字符串:")
-
- # 在指定类型的文件中查找字符串,并统计数量
- strFile = {}
-
- # 指定文件类型
- fileTypes = ["txt", "doc", "docx", "xls", "xlsx", "pdf"]
-
- # 遍历文件列表
- for file in fileList:
- # 获取文件后缀
- fileExtension = os.path.splitext(file)[1][1:].lower()
- # 判断文件类型是否在指定类型列表中
- if fileExtension in fileTypes:
- # 打开文件并搜索字符串
- with open(file, 'r') as f:
- content = f.read()
- count = content.count(queryStr)
- if count > 0:
- if file in strFile:
- strFile[file].append(count)
- else:
- strFile[file] = [count]
-
- # 输出文件名及查找字符串的数量
- print("文件名及查找字符串数量:")
- for file, counts in strFile.items():
- print(file, ":", sum(counts))
-
- 请将以上代码保存到名为"fileCheck.py"的文件中,并在命令行中运行python fileCheck.py来执行程序。
- 为了完成上述需求,你可以使用Python的os模块来遍历文件夹,并使用glob模块来根据文件后缀进行过滤。此外,还需要使用collections模块中的Counter来方便地统计文件后缀和字符串出现的次数。以下是一个可能的实现:
-
- python
- import os
- import glob
- from collections import Counter
-
- # 文件头部声明
- # ...(保持原样)
-
- # 1. 提示输入要统计的文件目录
- folderPath = input("请输入要统计的文件目录: ")
-
- # 2. 输出当前文件夹下所有子文件夹及文件列表,并输出文件数量
- fileList = []
- for root, dirs, files in os.walk(folderPath):
- for file in files:
- fileList.append(os.path.join(root, file))
- # 也可以包含子文件夹,但在此示例中我们仅统计文件
-
- filecount = len(fileList)
- print(f"文件数量: {filecount}")
-
- # 3. 以文件后缀为区分,统计文件类型及对应的文件数量
- file_extensions = Counter(os.path.splitext(file)[1].lower() for file in fileList if '.' in file)
- print("文件类型及对应的文件数量:")
- for ext, count in file_extensions.items():
- print(f"{ext.lstrip('.')}: {count}")
-
- # 4. 输入要查找的字符串
- querystr = input("请输入要查找的字符串: ")
-
- # 5. 在后缀为 txt, doc, excel, pdf 的文件中查找要查询的字符串
- # 注意:excel 文件通常不是纯文本文件,但我们可以假设它们是 .csv 或 .xlsx(使用相应的库)
- # 这里为简化,我们仅处理 .txt, .doc(假设是文本格式)和 .pdf(使用外部工具如PyMuPDF或pdfminer)
- strfile = {}
-
- def count_strings_in_file(filepath, querystr):
- with open(filepath, 'r', encoding='utf-8', errors='ignore') as file: # 忽略编码错误
- return file.read().count(querystr)
-
- for file in fileList:
- _, ext = os.path.splitext(file)
- ext = ext.lower()
- if ext in ['.txt', '.doc', '.pdf']: # 注意:.doc 和 .pdf 的处理可能需要专门的库
- if ext == '.pdf':
- # 对于PDF文件,你需要使用如PyMuPDF或pdfminer等库来提取文本
- # 这里仅作为示例,我们跳过PDF文件的处理
- continue
- count = count_strings_in_file(file, querystr)
- if count > 0:
- strfile[file] = count
-
- # 输出结果
- print("包含查询字符串的文件名及对应的数量:")
- for file, count in strfile.items():
- print(f"文件名: {file}, 字符串数量: {count}")
-
- # ...(其他代码或结束标志)
- 注意:
-
- 这个示例假设.doc文件是以文本格式存储的,但实际上它们通常是二进制格式,你需要使用像python-docx这样的库来读取它们。
- 对于.pdf文件,你需要使用像PyMuPDF或pdfminer.six这样的库来提取文本内容。
- 在处理文件时,我添加了encoding='utf-8', errors='ignore'来避免编码问题导致的错误,但这可能会丢失一些非UTF-8编码的字符。
- 如果你的环境中没有安装处理PDF文件的库,你可能需要注释掉或跳过对PDF文件的处理。