使用Python做数据处理时,常用的读取/加载文件txt方法有以下几种:

  1. numpy.loadtxt()方法
  2. pandas.read_csv()方法
  3. open文件方法

以前处理几K或几M的小数据集时,通常习惯使用第一种方法,没有发现有何问题。但今天突然发现,当处理数据samples个数有约38万、浮点类型、文件大小约20M的大型数据时,在内存足够的前提下,发现在Spyder中需要加载很久很久……于是寻找并对比了其他加载文件的改进方法,发现pandas.read_csv()方法及open方法都比numpy.loadtxt()方法的快了一个数量级。另外,由于文件操作涉及加载mat文件,顺便把scipy.io中的loadmat()方法拿过来对比了一下。

测试代码如下:

import datetime 
import numpy as np
import scipy.io as scio
import pandas as pd
# loadtxt
start = datetime.datetime.now()
np_data = np.loadtxt('big_data.txt') 
stop = datetime.datetime.now()
print(stop-start)
# read_csv
start = datetime.datetime.now()
pd_data = pd.read_csv('big_data.txt')
stop = datetime.datetime.now()
print(stop-start)
# open
start = datetime.datetime.now()
a = open('big_data.txt', 'r')
open_data= np.array(a.readlines())
a.close()
stop = datetime.datetime.now()
print(stop-start)
# loadmat
start = datetime.datetime.now()
mat_dict = scio.loadmat('big_data.mat')
mat_data = mat_dict['v0']
stop = datetime.datetime.now()
print(stop-start)

可见,在不考虑成百上千G\TB级别的大数据的前提下(此时大概率需要考虑大数据储存和分析手段去解决,涉及到诸如Spark、Hadoop、分布式等技术,不在讨论之列),几种方式读取文件的操作代码行数差不多,无非可能多一步list、dataframe、array间的互转操作而已,因此对于一般的数据分析够用。

基于上述代码和数据的测试结果(时间消耗)如下:

0:00:12.513535
0:00:00.525636
0:00:01.146893
0:00:00.177526

显然,在数据量大小一样的前提下,以耗时降序排列:

  • numpy的loadtxt方法最慢,用时约12.5s。
  • open文件的方法稍快,用时约1.1s。
  • pandas的read_csv方法更快,用时约0.5s。
  • scipy.io的loadmat方法最快,用时约0.2s。

因此,数据量达到20M、30万个samples的级别的txt格式文件时:

  • 需要避免使用loadtxt方法,推荐使用pandas的read_csv而不用转换文件格式。
  • 在数据源头,可以考虑将数据存为mat格式文件(比如我经常用python处理其他人提供的matlab生成的mat文件)。

最后,再次说明:以上仅仅是对20M级别的数据,在Spyder IDE环境下做的时间消耗的简单对比,可能不适用其他环境或大数据情形下。

使用Python做数据处理时,常用的读取/加载文件txt方法有以下几种:numpy.loadtxt()方法 pandas.read_csv()方法 open文件方法Python读取txt文件方法的速度对比和改进方案。
我有一个大文本 文件 (约7 GB)。我正在寻找是否存在阅读大文本 文件 的最快 方法 。我一直在阅读有关使用多种 方法 作为 读取 chunk-by-chunk以加快进程的过程。 例如,effbot建议 # File: readline-example-3.py file = open("sample. txt ") while 1: lines = file.readlines(100000)
读取 https://github.com/Embedding/Chinese-Word-Vectors中的中文词向量时,选择了一个有3G多的 txt 文件 ,之前在做词向量时用的是word2vec,所以直接导入模型然后indexword即可。 因为这是一个 txt 文件 ,尝试了DataFrame,np.load txt 等,都没有成功,其中主要遇到的问题是: 如何 读取 完整的大 文件 ,而不会出现内存不足me...
def Read Txt Data(BINARY,himg ,wimg, txt name): a = np.load txt ( txt name, skiprows=0, dtype=bytes).astype(str) for u in range(himg): for v in range(wimg): gray = a[u][v] if gray == '1':
1.磁盘占用率高 本人处理数据集标签 文件 的时候,经常会遇到格式转换的问题比如coco转voc,xml转voc等等。每个 文件 都不是很大,可能只有1-2k,但是架不住多啊。一多就要疯狂io,磁盘占用率就很高。刚开始发现这个问题就使用了数据结构,真的是学了这么多年数据结构,第一次感觉到了他有多牛逼。set、dict都比list 快超级多,在处理大 文件 之类的情况现象超级明显。 2.内存占用率高 将提取的内容都放在内存里了,确实节约了不少时间,但是,到最后还是会变慢。what`shappened? 内存占用.
要在 Python 读取 txt 文件 ,需要使用 Python 的内置函数 open() 和 read()。 首先,使用 open() 函数打开 文件 ,并指定 文件 的路径和 读取 模式('r' 表示只读)。 f = open('test. txt ', 'r') 然后,使用 read() 函数 读取 文件 的内容。 content = f.read() print(content) 最后,使用 close() 函数关闭 文件 。 f.close() 也可以使用 with 语句来打开 文件 ,这样可以保证在 文件 使用完之后自动关闭 文件 。 with open('test. txt ', 'r') as f: content = f.read() print(content) 在使用 read() 函数 读取 文件 内容时,也可以使用 readlines() 函数来 读取 文件 的每一行内容,并将每一行的内容存储在一个列表中。 with open('test. txt ', 'r') as f: lines = f.readlines() print(lines) 在使用 readlines() 函数 读取 文件 内容时,也可以使用 for 循环来逐行 读取 文件 内容。 with open('test. txt ', 'r') as f: for line in f: print(line)