Python处理大数据——逐行读写数据
文章目录
- Python处理大数据——逐行读写数据
- 前言
- I. 导入必要的库
- II. 逐行读取TXT数据
- III. 逐行写入CSV
- i. 为什么我们要用split('\t')?
- ii. 如果csv文件中已经存在数据了该怎么办?
前言
最近在深度学习过程中,要处理很大的训练集。有些训练集的大小甚至会超出PC的运存,导致我们无法直接使用“暴力”地直接读取数据的方式。最终我的解决办法是考虑逐行读写数据的方式,特此记录一下。
逐行读写数据的方式有很多种,这里只是给出其中一种方式……若有不足之处,还请见谅^ _ ^
我们的目标是将几个txt文件合成一个大的csv文件
I. 导入必要的库
import numpy as np
import csv
我们最后要写入csv文件,所以我们方便起见引入csv库。
II. 逐行读取TXT数据
#先把之前处理了一部分的数据导入
#with open(xxxx)返回的是一个迭代器
with open('dnam.txt') as txt_file:
lines = []
for line in txt_file:
#line.rstrip('\n')是将我们读入的每行之间的分割符号删去
lines.append(line.rstrip('\n'))
#子数据集的名称,做循环用
cancer_names = ['BRCA', 'CESC', 'DLBC', 'KIRC', 'KIRP',
'PRAD', 'SARC', 'TGCT', 'THCA', 'THYM', 'UCEC']
for name in cancer_names:
i = 0
with open(f'Data/{name}/{name}ed_dnam.txt') as txt_file:
for line in txt_file:
if i == 0:
#每个子数据集的第一行不要,因为第一行是我们的column_name,我们只需要sample就行
i += 1
continue
lines.append(line.rstrip('\n'))
III. 逐行写入CSV
with open('new_dnam.csv', 'w') as csv_file:
#我们如果要写入csv文件的话,我们直接用库里的writer就行
writer = csv.writer(csv_file, delimiter=',')
for line in lines:
row = np.array(line.split('\t'))
writer.writerow(line)
在上面的代码中,我们在每一个loop里均使用了如下的代码,来对每一行写入的数据进行处理.
row = np.array(line.split(’\t’))
i. 为什么我们要用split(’\t’)?
split()函数是将我们的str类型,按照某个给定的符号(如本文给定的就是 \t )进行切分,我们逐行读进来的数据,如果不进行切分他就会是这样的(以一个sample的数据为例):
那么经过切分之后,我们会得到这样的形式(没有截全):
只有这样写入的数据才会是一个个分开的,否则他们会挤在一个格子里~
ii. 如果csv文件中已经存在数据了该怎么办?
其实很简单,我们只需要在文件读取方式上修改一下就行!
将原来的:
with open('xxxx.csv', 'w') as file:
#......
换成:
with open('xxxx.csv', 'a') as file:
'''
以这种方式打开文件,可以让我们在原来的数据后面接着写入数据!
'''
以上就是我在处理大数据时所用的方法。