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的数据为例):

python with open a 逐行_写数据


那么经过切分之后,我们会得到这样的形式(没有截全):

python with open a 逐行_数据_02


只有这样写入的数据才会是一个个分开的,否则他们会挤在一个格子里~

ii. 如果csv文件中已经存在数据了该怎么办?

其实很简单,我们只需要在文件读取方式上修改一下就行!
将原来的:

with open('xxxx.csv', 'w') as file:
	#......

换成:

with open('xxxx.csv', 'a') as file:
	'''
	以这种方式打开文件,可以让我们在原来的数据后面接着写入数据!
	'''

以上就是我在处理大数据时所用的方法。