You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python如何处理无扩展名文件?按指定扩展名统计目录文件行数问题

问题修复方案

1. 无扩展名文件匹配修复

你之前加空白行导致所有文件被统计的核心原因是:空字符串作为endswith的参数时,任意字符串都会返回True,所以不能直接用空白行匹配无扩展名文件。
修改方案:

  • 读取扩展名列表时先过滤空行和首尾空白字符
  • 单独增加无扩展名文件的判断逻辑,用特殊标记(比如__NO_EXT__)在配置文件中指定是否匹配无扩展名文件,避免误操作。

2. 目录排除功能修复

原代码中dirpath not in DIRS_TO_SKIP的判断逻辑错误,os.walk要跳过指定目录的正确做法是直接修改遍历过程中的dirnames列表,os.walk会自动跳过被移除的目录。

3. 完整可运行修改代码

import os


FILE_TYPES_FILE = "file_types.txt"
DIRECTORY_NAME = "directory_to_go_through"
OUTPUT_FILE_NAME = "file_lengths.csv"
OUTPUT_FILE_FOLDER = "folder.csv"
TO_SKIP_FILE = "to_skip.txt"

def get_file_length(filename):
    with open(filename, "rb") as file:
         data = file.readlines()
    return len(data)

# 读取扩展名配置
with open(FILE_TYPES_FILE, "r", encoding="utf-8") as file:
    FILE_TYPES = [line.strip() for line in file if line.strip()]
# 处理无扩展名匹配标记
MATCH_NO_EXT = "__NO_EXT__" in FILE_TYPES
if MATCH_NO_EXT:
    FILE_TYPES.remove("__NO_EXT__")
FILE_TYPES = tuple(FILE_TYPES)


FILES_TO_SKIP = []
DIRS_TO_SKIP = []
with open(TO_SKIP_FILE, "r", encoding="utf-8") as file:
    to_skip = [line.strip() for line in file if line.strip()]
    for thing_to_skip in to_skip:
        if os.path.isfile(thing_to_skip):
            FILES_TO_SKIP.append(thing_to_skip)
            print(f"{thing_to_skip} added to files-to-skip")
        elif os.path.isdir(thing_to_skip):
            DIRS_TO_SKIP.append(thing_to_skip)
            print(f"{thing_to_skip} added to directories-to-skip")
        else:
            continue


list_of_files = []
excel_string = ""
for(dirpath, dirnames, filenames) in os.walk(DIRECTORY_NAME):
    # 目录排除:修改dirnames列表让os.walk自动跳过排除目录
    dirnames[:] = [d for d in dirnames if os.path.join(dirpath, d) not in DIRS_TO_SKIP]
    # 筛选符合要求的文件
    for file in filenames:
        full_path = os.path.join(dirpath, file)
        if full_path in FILES_TO_SKIP:
            continue
        ext = os.path.splitext(file)[1]
        if ext in FILE_TYPES or (ext == "" and MATCH_NO_EXT):
            list_of_files.append(full_path)
    excel_string += dirpath + "\n"


with open(OUTPUT_FILE_FOLDER, "w", encoding="utf-8") as file:
    file.write(excel_string)

input("Press enter to exit...") 
excel_string = ""


for file in list_of_files:
    excel_string += f"{file};{get_file_length(file)}\n"

print(excel_string)

with open(OUTPUT_FILE_NAME, "w", encoding="utf-8") as file:
    file.write(excel_string)
    print(excel_string)


input("Press enter to exit...")

使用说明

需要匹配无扩展名文件时,直接在file_types.txt里加一行__NO_EXT__即可,配置文件示例:

.cpp
.c
.h
.bat
__NO_EXT__

输出的CSV格式完全符合路径;行数的要求。

内容的提问来源于stack exchange,提问作者Twantie

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.02 09:36:06