自学python系列6:python迭代,有关文件的输入输出

首先理解下什么是迭代,python中所有从左往右扫面对象的方式都是可迭代的

有哪些方式是可迭代的:

1.文件操作

   我们读取文件的时候,会用到一个readline()方法,其实它就是一个迭代器,它会返回当前的数据,然后自动的调用内置的next()方法来让文件的读取头自动的移动到当前的下面一行,准备下次的读取,到达文件末尾时,就会返回空字符串.

01>>> f=open('hello.py')
02>>> f.readline()
03'#!/usr/bin/python2.5\n'
04>>> f.readline()
05'print "hello.word!"\n'
06>>> f.readline()
07'\n'
08>>> f.readline()
09''
10  
11>>> for in open('hello.py'):
12...              print(i)
13...
14#!/usr/bin/python2.5
15print "hello.word!"

用上面这样方式来读取文件内容的话,速度很快,内存占用也比较低,特别适合操作大文件.

下面这个方式适合操作一些小的文件,速度和效率没有上面的好,所以建议以后操作文件的话,尽量用上面的。

1>>> for in open('hello.py').readlines():
2...          print i
3...
4#!/usr/bin/python2.5
5print "hello.word!"

read方法和readline方法,
read()方法把整个文件的内容放到字符串里
readline()方法则把文件的内容按照行为单位放到列表里。
一般要替换文件里的某个字符的话,最好有readline,然后用循环把一行一行内容循环出来,再查找替换,这样效率比整个读到一个字符串里来查找匹配效果更高。

 

 

2 for循环

例如:

1>>> for in range(5):
2...       print(i)
3...
40
51
62
73
84

它中间处理的过程和下面的是一样的:

01>>> L=[0,1,2,3,4]
02>>> I=iter(L)
03>>> I.next()
040
05>>> I.next()
061
07>>> I.next()
082
09>>> I.next()
103
11>>> I.next()
124
13>>> I.next()
14Traceback (most recent call last):
15  File "<stdin>", line 1, in <module>
16StopIteration

每次调用迭代器调用next()方法返回结果,并让文件指针往下移动一行,最后已StopIteration异常结束迭代。

 

3.列表解析:

相比python for循环速度会快很多

例如:

1>>> L=[x+10 for in range(10)]
2>>> L
3[10, 11, 12, 13, 14, 15, 16, 17, 18, 19]

python会在解释器里对range(10)进行迭代,依次把列表里的内容取出来,赋值给最左边的x,然后执行x+10的操作,
并且把执行好的结果保存在列表里。等range(10)迭代完以后就新生成了一个列表,结果就是[10,11,12,13,14,15,16,17,18,19]
从上面可以看出,这也是建立python 列表的一个方法。

上面例子也可以用for循环来实现.

1>>> res=[]
2>>> for in range(10):
3...       res.append(x+10)
4...
5>>> res
6[10, 11, 12, 13, 14, 15, 16, 17, 18, 19]

从上面可以看出,python列表解析比手动的for 更加精简,而且运行的更快(往往速度回快一倍),因为他们的迭代在解析器内部是以C语言的速度执行的,而不是以手动python代码执行的,特别对于较大的数据集合,这是使用列表解析的一个主要的性能优点.

转载于:https://www.cnblogs.com/wyx123/articles/4099136.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值