一般的读取文件的方法:

with open(file_path, "r") as f:

  print f.read()

或者

with open(file_path,"r") as f:

  for line in f.readlines():

    print line

read()是一次性把文件内容以字符串的方式读到内存,放到一个字符串变量中

readlines() 是一次性读取所有内容,并按行生成一个list

因一次性读取,若文件内容过大,则会将内存爆掉。报错:“MemoryError”

读取大几G的大文件,可以利用生成器 generator

方法一: 将文件切分成小段,每次处理完小段,释放内存

def read_in_block(file_path):

  BLOCK_SIZE=1024

  with open(file_path,"r") as f:

    while True:

      block =f.read(BLOCK_SIZE) #每次读取固定长度到内存缓冲区

      if block:

        yield block

      else:

        return #如果读取到文件末尾,则退出

for block in read_in_block(file_path):

  print block

// 这个方法,速度很快(只有3s),但有个问题,若满足了1024时,会将正好在1024位置的数据切开,如下

cad1a596-fe14-45c4-b920-8bc0eab38ee6
c6f0c5bf-4359-4a28-9f90-3c4f61b5e12d
3815cd95-2147-4701-8d50-273325140643
c047d057-c33d-4a69-995a-5
29cb5cb04ee
afd9cffb-09f0-4347-bf12-34485969b366
3c145a79-c72c-43db-8e68-02be8046c6b4

虽然每个block都是str, 但无法直接得到每行的id,只能再切分。

方法二 利用open("","")系统自带方法生成的迭代对象

  with open(file_path) as f:

    for line in f:

      print line

for line in f 这种用法是把文件对象f当作迭代对象,系统将自动处理IO缓存和内存管理。

耗时较第1种方法慢一点,要25s。 但每个Line, type都是str, 都是自己需要的一行数据(一行是一个id)。

>>> f = open("dup_file - Copy (2).txt")
>>> type(f)
<type 'file'>

>>> type(f.read())
<type 'str'>

>>> f.read()

''

>>>print  f.read()

aac66f36-d2ad-4d94-9804-2220262cc354
c5a1b5ee-32b6-4912-8b90-ece3bd36d1e5
90e6509a-e918-447e-92ee-b853b9b49f15
7b7495d3-1aa5-48b5-a305-ae137d46d605

>>> f.readlines()
[]

>>> type(f.readlines())
<type 'list'>

>>> print f.readlines()
[]

>>> for i in f.readlines():
... type (i)
... print i

<type 'str'>
994761db-37fa-4243-9d13-0acd193763dd

<type 'str'>
993b2806-51fe-412d-8df2-526ea550e889

<type 'str'>
aac66f36-d2ad-4d94-9804-2220262cc354

>>> type(f.readline())
<type 'str'>

// // //

>>> f = open("dup_file - Copy (2).txt")
>>> f.readline()
'8957d983-05e2-4a54-a7b3-f1532421c7a7\n'
>>> f.readline()
'ccf30309-2a02-4d09-8ea8-70c3da8de09d\n'
>>> f.readline()
'492ddb07-e0c5-4dda-ae91-8b3700d05a79\n'
>>> f.readline()
'9cee8472-dfc1-49ac-90c3-572f68373934\n'
>>> f.readline()
''
>>> f.readline()
''

// // // 第1次调用f.readline(),没有输出或者操作,后面再也无法循环到

>>> f = open("dup_file - Copy (2).txt")
>>> type(f.readline())
<type 'str'>
>>> f.readline()
'ccf30309-2a02-4d09-8ea8-70c3da8de09d\n'
>>> f.readline()
'492ddb07-e0c5-4dda-ae91-8b3700d05a79\n'
>>> f.readline()
'9cee8472-dfc1-49ac-90c3-572f68373934\n'
>>> f.readline()
''
>>> f.readline()

// // //  使用文件对象f

>>> f = open("dup_file - Copy (2).txt")
>>> for i in f:
... type(i)
... print i
...
<type 'str'>
8957d983-05e2-4a54-a7b3-f1532421c7a7

<type 'str'>
ccf30309-2a02-4d09-8ea8-70c3da8de09d

<type 'str'>
492ddb07-e0c5-4dda-ae91-8b3700d05a79

<type 'str'>
9cee8472-dfc1-49ac-90c3-572f68373934

>>> f = open("dup_file - Copy (2).txt")
>>> for i in f.readlines():
... type(i)
... print i
...
<type 'str'>
8957d983-05e2-4a54-a7b3-f1532421c7a7

<type 'str'>
ccf30309-2a02-4d09-8ea8-70c3da8de09d

<type 'str'>
492ddb07-e0c5-4dda-ae91-8b3700d05a79

<type 'str'>
9cee8472-dfc1-49ac-90c3-572f68373934

python 如何读取大文件的更多相关文章

  1. Python逐块读取大文件行数的代码 - 为程序员服务

    Python逐块读取大文件行数的代码 - 为程序员服务 python数文件行数最简单的方法是使用enumerate方法,但是如果文件很大的话,这个方法就有点慢了,我们可以逐块的读取文件的内容,然后按块 ...

  2. Python花式读取大文件(10g/50g/1t)遇到的性能问题(面试向)

    原文转载自「刘悦的技术博客」https://v3u.cn/a_id_97 最近无论是面试还是笔试,有一个高频问题始终阴魂不散,那就是给一个大文件,至少超过10g,在内存有限的情况下(低于2g),该以什 ...

  3. python json及mysql——读取json文件存sql、数据库日期类型转换、终端操纵mysql及python codecs读取大文件问题

    preface: 近期帮师兄处理json文件,须要读到数据库里面,以备其兴许从数据库读取数据.数据是关于yelp站点里面的: https://github.com/Yelp/dataset-examp ...

  4. Python 之读取大文件readline与readlines的差别

    import time def get_all_lines(filename): start_time = time.time() try: f = open(filename, 'rb') exce ...

  5. Python读取大文件的"坑“与内存占用检测

    python读写文件的api都很简单,一不留神就容易踩"坑".笔者记录一次踩坑历程,并且给了一些总结,希望到大家在使用python的过程之中,能够避免一些可能产生隐患的代码. 1. ...

  6. Python读取大文件(GB)

    Python读取大文件(GB) - CSDN博客 https://blog.csdn.net/shudaqi2010/article/details/54017766

  7. 强悍的Python读取大文件的解决方案

    这是一道著名的 Python 面试题,考察的问题是,Python 读取大文件和一般规模的文件时的区别,也即哪些接口不适合读取大文件. 1. read() 接口的问题 f =open(filename, ...

  8. PHP 与Python 读取大文件的区别

    php读取大文件的方法   <?php function readFile($file) { # 打开文件 $handle = fopen($file, 'rb'); while (feof($ ...

  9. Python json 读取 json 文件并转为 dict

    Python json 读取 json 文件并转为 dict 在 D 盘 新建 test.json: { "test": "测试\n换行", "dic ...

随机推荐

  1. Jquery EasyUI tabs处理

    一 获取选中的 Tab 1.   // 获取选中的 tab panel 和它的 tab 对象 2.  var pp = $('#tt').tabs('getSelected'); 3.  var ta ...

  2. iOS核心应用对象

    IOS应用之设计模式:模型-视图-控制器 iOS应用与其它应用的区别就在于它所管理的数据(和相应的业务逻辑)以及将数据展现给用户的方式.大多数UIKit对象并不定义应用而是帮助完善其行为.例如,你的应 ...

  3. $(window).height() 文档高度问题

    遇到一个这样的问题: 有个项目做的好好的,测试时一步一步小心过来,做了一段时间后,发现前面的完成的功能出了问题了 首先描述下出问题的功能: 做滚动条下拉加载的时候用的网上找的一种方法 $(window ...

  4. nginx反射理传apache配置 - cookie去哪儿了?

    在公司接手了个微信项目,由于微信环境下访问网站需要使用对外开放的域名,所以有相关问题,都是直接运维同事帮忙处理. 原理是这样: 方案一: 1. 将域名解析指向测试服务器的地址: 2. 开放相关端口访问 ...

  5. Java如何根据IP获取当前定位

    当今购物.旅游等服务型的网站如此流行,我们有时候也会碰到这样网站的开发. 在开发此类网站时,为了增加用户的体验感受,我们不得不在用户刚进入网站时定位到用户所在地, 更好的为用户推荐当地产品.比如去哪儿 ...

  6. Python学习笔记---形式参数(parameter)和实际参数(argument)

    def mydemo(name): '函数定义过程中的name是叫形参' #因为它只是一个形式,表示占据一个参数位置 print('传递进来的' + name + '叫做实参,因为它是具体的参数值!' ...

  7. (二)Python是一门什么样的语言?

    在学习python是一门什么样的语言之前首先需要知道什么是编译和解释? 编译器是把源程序的每一条语句都编译成机器语言,并保存成二进制文件,这样运行时计算机可以直接以机器语言来运行此程序,速度很快; 而 ...

  8. 【CSS学习笔记】背景图片

    直接看代码: background: blue; /*页面背景为蓝色,很简单的代码*/background-image:url(small.jpg); /*页面背景是名字叫small.jpg的图片*/ ...

  9. 使用signalR创建聊天室。

    浏览器支持Html5的情况下,SignalR使用WebSockets,当不支持时SignalR将使用其它技术来实现通讯. 界面如下:左侧包含三种聊天对象,不同的聊天对象会创建不同的对话框. 设计思路参 ...

  10. android 音频播放总结 soundlPool,MediaPlay

    soundlPool 用于小音频的播放多个同时播放. 使用步骤: 步骤一: 首先下载音频文件可以将其放入assets文件夹下或者res下的raw文件夹下,区别在于assets下可以再新建文件夹二raw ...