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

如何从多个文本文件获取元组列表?并实现子目录TXT文件0、1计数提取以适配Pandas数据框

解决你的文本文件0/1计数问题

我看了你的代码,发现几个关键问题导致它没法返回所有文件的统计结果,现在帮你修正并优化:

原代码的核心问题

  • 每次处理新文件时,你都重新初始化了list_zeros和list_ones,之前文件的统计数据会被直接清空
  • 函数在处理第一个文件后就直接return了,后面的文件根本没机会被处理
  • 当前逻辑是统计每行的0/1数量并加入列表,但看起来你需要的是每个文件的总0数和总1数(这样才能对应到DataFrame的每一行数据)

修正后的完整代码

from pathlib import Path
import pandas as pd

def count_0s_1s(paths):
    # 初始化两个列表,用来存储每个文件的总0数和总1数
    total_zeros = []
    total_ones = []
    # 遍历所有目标文件路径
    for p in paths:
        # 读取整个文件的文本内容
        content = p.read_text()
        # 统计当前文件中0和1的总数
        zero_count = content.count('0')
        one_count = content.count('1')
        # 将统计结果添加到对应列表
        total_zeros.append(zero_count)
        total_ones.append(one_count)
    # 所有文件处理完成后返回两个统计列表
    return total_zeros, total_ones

# 目标根目录
path = "/content/drive/MyDrive/data/classes/"
# 获取所有子目录下以marked开头的txt文件路径(转成list方便后续查看)
paths = list(Path(path).glob("*/marked*.txt"))
# 调用函数获取统计结果
n_zeros, n_ones = count_0s_1s(paths)

# 可选:直接转换成Pandas DataFrame,方便后续分析
df = pd.DataFrame({
    'file_path': [str(p) for p in paths],
    'zero_count': n_zeros,
    'one_count': n_ones
})

# 查看前几行结果
print(df.head())

代码优化说明

  • 把列表初始化移到了文件循环外面,确保能累积所有文件的统计值
  • 直接对整个文件内容统计0/1总数,比逐行统计更高效(如果需要每行的统计数据,可以再调整回逐行逻辑)
  • 遍历完所有文件后再返回结果,不会提前终止循环
  • 额外添加了DataFrame转换代码,包含文件路径列,方便你对应每个文件的统计数据

这样修改后,你就能得到两个符合需求的列表:n_zeros存储每个文件的0总数,n_ones存储每个文件的1总数,完美适配Pandas数据框的构建~

内容的提问来源于stack exchange,提问作者João Moço

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.29 13:02:38