如何从多个文本文件获取元组列表?并实现子目录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
相关产品推荐
相关产品推荐

