python 去除大文件所有行全为零,所有列全为零的行和列

来源:互联网 发布:北控集团工资待遇知乎 编辑:程序博客网 时间:2024/05/21 17:33

先介绍一下博主的文件大小:1.6G,是一个零和1文档,共42万行,2千多列

需要解决问题是:去除所有为零的行,去除所有为零的列

首先,去除所有为零的行比较容易,因为一行行读,不占多大内存。

下面是去除行都为零的代码:

with open(r"C:\Users\xilu\Desktop\newdata.txt",'a') as wfile:     with open(r'C:\Users\xilu\Desktop\42wRow.txt','r') as rfile:         for line in rfile:             mline = line.strip()             if mline == '':           #有些是空行                 continue             else:                 b = [int(i) for i in mline.split('\t')]             if any(b[1:]):                 wfile.write(line)
通过上面代码将原始数据所有为零的行除去,其他写入新的文件newdata.txt中。

然后,解决去除所有为零的列就相对不容易,因为每列要42万行,并且python中没有按列读取文件的函数(目前自己没有搜索到),所以只能分块读,并且还要写入全不为零的列。因此要判断newdata.txt 文件中是否每列不都是零,是的话,去除,然后再写入。
下面是去除列都为零的代码:

import pandas as pdchunker = pd.read_csv(r"C:\Users\xilu\Desktop\newdata.txt",header=None,sep='\t',chunksize=10000)a = set(range(1,1973))for piece in chunker:    b = set()    for item in piece:               if not piece[item].any():            b.add(item)    a = a.intersection(b)print(a)chunker = pd.read_csv(r"C:\Users\xilu\Desktop\newdata.txt",header=None,sep='\t',chunksize=10000)for piece in chunker:        for i in a:        del piece[i]    piece.to_csv(r"C:\Users\xilu\Desktop\goodata.txt",header=None,index=False,mode='a')                                       
这是利用pandas中的DataFrame中的读写函数,分块读取文件,记录每块中每列全为零的列索引,然后求每块为零列索引的交集,即为文件中一列42万行全为零的列索引。然后在读取并分块,除去索引的列,剩下每块读入另一文件goodata.txt即可,因此完成了对大文件数据的处理。

1 0
原创粉丝点击