数量级很大,每个txt文本中数据只有三列,但是大概有3000w行
第一列可以忽略,如果第二列相同,则将第三列的数值累加
数据有丢失部分
给您提供下2个日常批量读取txt等文件的模板.
第1个: 适合读取文件不是太大的.
# 导入工具包
import pandas as pd
import numpy as np
import os
# 路径
path = '文件路径'
# 文件列表
files = []
for file in os.listdir(path):
if file.endswith(".txt"):
files.append(path+file)
# 定义一个空的dataframe
data = pd.DataFrame()
# 遍历所有文件
for file in files:
datai = pd.read_csv(file,encoding='gbk',sep=',') # 分割符(\r)、换行(\n)、制表符(\t) 顿号空格(\s 或\s+)
datai_len = len(datai)
data = data.append(datai) # 添加到总的数据中
print('读取%i行数据,合并后文件%i列, 名称:%s'%(datai_len,len(data.columns),file.split('/')[-1]))
# 查看是否全部读取,格式是否出错
# 重置索引
data.reset_index(drop=True,inplace=True)
第2个: 适合读取合并之后文件比较大.
前段时间用这段代码汇总了多个txt文件, 成一个300w, 40列的txt.
文件合并后的数据是不是都需要用到的, 如果不是的话,建议定义一个函数每次读取后进行处理下(筛选过滤), 这样合并后的数据就会少. 数据累加可读取完后处理
n = 1
for file in files:
with open(file, 'r',encoding='gbk') as f_input:
lisi= []
for line in f_input:
lisi.append(list(line.strip().split('|')))
datai = pd.DataFrame(lisi)
datai2 = guolv(datai) # 定义了一个guolv()数据处理函数
data = data.append(datai2)
print('读取第%i个文件,件名%s,文件%i行,文%i列.处理后文件%i行,%i列' %(n,file,datai.shape[0],datai.shape[1],datai2.shape[0],datai2.shape[1]))
n = n + 1
一个文件大概300M的样子,可以并行读取,写到Redis里进行数据累加,处理完成之后,再回写文件。
如果内存不足,可以中途写几次文件,再合并。
您好,我是有问必答小助手,你的问题已经有小伙伴为您解答了问题,您看下是否解决了您的问题,可以追评进行沟通哦~
如果有您比较满意的答案 / 帮您提供解决思路的答案,可以点击【采纳】按钮,给回答的小伙伴一些鼓励哦~~
ps:问答VIP仅需29元,即可享受5次/月 有问必答服务,了解详情>>>https://vip.csdn.net/askvip?utm_source=1146287632