博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
python 之更省内存的方式读取文件
阅读量:6241 次
发布时间:2019-06-22

本文共 1227 字,大约阅读时间需要 4 分钟。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
#!/usr/bin/env python
# -*- coding: utf-8 -*-
#tell() 方法返回文件的当前位置,即文件指针当前位置。
#使用with的目的是为里可以自动close掉文件对象
 
 
#生成器简单小粒子
def 
foo1():
    
yield 
1    
    
yield 
2
    
yield 
3
    
yield 
4
     
for 
in 
foo1():
    
print
(i)
'''
如执行:print(foo1())
调用这个函数的时候,返回的是一个生成器
生成器只有遍历的时候函数里的代码才会去执行,并且每一次循环只执行一条
生成器是一个带yield语句的函数
执行过程简单概述:
1、首先执行函数,然后遍历,遍历到第一条的时候,执行yield 1
2、遍历到第2条的时候,不经过yield 1,而是直接执行yield 2
3、以此类推
4、特点:会暂时保存执行的位置
'''
 
 
#文件遍历小粒子
#普通函数实现
 
#定一个需读取的文件
files 
= 
'/etc/passwd'
 
#普通函数
def 
foo2():
    
with 
open
(files,
'r'
) as f:
        
print
(
'文件名: '
, f.name)
        
seek_id 
= 
0
        
while 
True
:
            
f.seek(seek_id)
            
data 
= 
f.readline()
            
if 
data:
                
#获取文件指针的当前位置
                
seek_id 
= 
f.tell()
                
print
(
'文件指针当前位置: %d' 
%
(seek_id))
                
print
(
'读取的数据为: %s' 
% 
(data))
            
else
:
                
break
#直接调用这个函数
foo2()
 
 
#生成器实现
def 
foo():
    
seek_id 
= 
0
    
while 
True
:
        
with 
open
(files,
'r'
) as f:
            
f.seek(seek_id)
            
data 
= 
f.readline()
            
if 
data:
                
seek_id 
= 
f.tell()
                
print
(
'文件指针当前位置: %d' 
%
(seek_id))
                
yield 
data
            
else
:
                
break
#通过遍历生成器来执行函数里面的代码
for 
val 
in 
foo():
    
print
(val)

1
<br>
本文转自 TtrToby 51CTO博客,原文链接:http://blog.51cto.com/freshair/1870539

转载地址:http://cbcia.baihongyu.com/

你可能感兴趣的文章
Linux文件权限与属性详解 之 chattr & lsattr
查看>>
负载均衡集群之LVS配置命令
查看>>
PHP使用文件流下载文件方法(附:解决下载文件内容乱码问题)
查看>>
多线程编程
查看>>
再谈谈数学
查看>>
Scheme来实现八皇后问题(1)
查看>>
pip或者anacnda安装opencv以及opencv-contrib
查看>>
Unity 5 中的全局光照技术详解(建议收藏)
查看>>
python 的矩阵运算——numpy
查看>>
处理handler中的内存泄漏
查看>>
P8 Visible Lattice Points
查看>>
小小不爽一下
查看>>
【转】NuGet学习笔记(1)——初识NuGet及快速安装使用
查看>>
Python学习笔记 - MySql的使用
查看>>
WebApi FormData+文件长传 异步+同步实现
查看>>
Linux文件与目录管理
查看>>
多态的弊端
查看>>
Spring @Import 注解
查看>>
PBOC APDU命令解析【转】
查看>>
封装HttpUrlConnection开箱即用
查看>>