如何分块读取制表符分隔TXT文件并完成指定数据统计?
问题解答
关于导入pandas DataFrame的内存问题
如果你的文件体积不大(比如几百MB以内),直接导入pandas DataFrame完全没问题,不会触发内存错误。但如果是超大文件(比如几个GB甚至更大),一次性加载就可能爆内存,这时候就得用逐行处理的方式。
方案一:小文件用pandas快速实现
直接读取文件后完成统计,代码如下:
import pandas as pd # 读取制表符分隔的TXT文件,指定列名方便操作 df = pd.read_csv('your_file.txt', sep='\t', header=None, names=['col1', 'col2', 'col3', 'col4', 'col5']) # 统计A1出现次数 a1_count = df['col3'].value_counts().get('A1', 0) # 收集非A1的所有值 non_A1 = df[df['col3'] != 'A1']['col3'].tolist() # 总行数 total_rows = len(df) print(f"A1计数: {a1_count}") print(f"非A1列表: {non_A1}") print(f"总行数: {total_rows}")
方案二:超大文件逐行处理(避免内存错误)
如果文件体积过大,用原生Python逐行读取处理,完全不占用多余内存:
a1_count = 0 non_A1 = [] total_rows = 0 with open('your_file.txt', 'r', encoding='utf-8') as f: for line in f: total_rows += 1 # 按制表符分割行内容,取第三列(索引从0开始) cols = line.strip().split('\t') if len(cols) >= 3: # 避免空行或格式错误的行导致索引越界 col3_val = cols[2] if col3_val == 'A1': a1_count += 1 else: non_A1.append(col3_val) print(f"A1计数: {a1_count}") print(f"non_A1 = {non_A1}") print(f"总行数: {total_rows}")
注意事项
- 逐行处理时,务必判断每行分割后的列数是否足够,避免索引越界错误。
- 如果文件使用特殊编码,要在
open函数中指定对应的encoding参数(比如gbk)。
内容的提问来源于stack exchange,提问作者InterestingPenguin80
相关产品推荐
相关产品推荐

