前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >文件的遍历

文件的遍历

作者头像
老七Linux
发布2018-05-31 11:04:01
8620
发布2018-05-31 11:04:01
举报
for循环 文件遍历

遍历循环文件的模式如下几种:

r:以读方式打开
w :以写方式打开
a :以追加模式
---------------------------
r+ :以读写模式打开
w+:以读写模式打开 (参见 w )
a+:以读写模式打开 (参见 a )
----------------------------
rb:以二进制读模式打开
wb:以二进制写模式打开 (参见 w )
ab:以二进制追加模式打开 (参见 a )
-------------------------------------
rb+:以二进制读写模式打开 (参见 r+ )
wb+:以二进制读写模式打开 (参见 w+ )
ab+: 以二进制读写模式打开 (参见 a+)
------------------------------------
with open

在tmp目录下有个文件:

[[email protected] ~]# cat /tmp/asd.txt
this
is
a
test

In [1]: open('/tmp/asd.txt')    //返回文件的一个对象
Out[1]: <open file '/tmp/asd.txt', mode 'r' at 0x34c78a0>

In [2]: aa = open('/tmp/asd.txt')   //默认模式为 r

In [3]: type(aa)
Out[3]: file

In [4]: aa.     //很多文件的方法:
            aa.close      aa.errors     aa.isatty     aa.newlines   aa.readinto   aa.seek       aa.truncate   aa.xreadlines 
            aa.closed     aa.fileno     aa.mode       aa.next       aa.readline   aa.softspace  aa.write                    
            aa.encoding   aa.flush      aa.name       aa.read       aa.readlines  aa.tell       aa.writelines               

In [4]: aa.close()      //关闭打开的文件

In [6]: aa = open('/tmp/asd.txt', 'w')      //指定特定的格式打开文件
读取文件 read ,readline , readlines
In [7]: aa.write("aaa")     //只支持 字符串 写入

In [8]: aa.close()      //只有这边关闭后,客户端才可以看到写的内容

[[email protected] ~]# cat /tmp/asd.txt       //只有一个aaa,也就是说,w 模式会覆盖原有的内容
aaa

In [11]: aa.read()      //从头读到尾
Out[11]: 'aaa'

In [12]: aa.read()      //上一步已经读取完毕
Out[12]: ''

In [13]: type(aa.read())        //类型为字符串
Out[13]: str

In [18]: aa.read(2) //指定读取的指针位数
Out[18]: 'aa'

In [19]: aa.read()
Out[19]: 'a'

In [20]: aa.read()  //一直到读取完毕
Out[20]: ''

In [28]: aa.readline()  // readline 代表着 一行一行的 读取内容
Out[28]: '123\n'

In [29]: aa.readline()
Out[29]: 'asd\n'

In [30]: aa.readline()
Out[30]: 'zxd\n'

In [31]: aa.readline()      //直到读取完毕
Out[31]: ''

In [33]: aa.readlines()     //readlines 代表 有多少行 读读多少行 并以 list的模式展示
Out[33]: ['123\n', 'asd\n', 'zxd\n']

//read 和 readline 返回的都是字符串 格式, 唯有 readlines 返回的是 list 格式。
使用脚本遍历文件内容:
#! /usr/bin/python

aa = open('/tmp/asd.txt')
for line in aa.readlines():
    print line

执行结果如下:

[[email protected] python]# python 2.py 
123

asd

zxd

//如上我们看得出来,每行输出默认都会有个换行符,使用
    print line,
就会让其没有换行符输出

[[email protected] python]# python 2.py 
123
asd
zxd

分析:

#! /usr/bin/python

aa = open('/tmp/asd.txt')
for line in aa.readlines():     //会产生1G的列表
    print line,

//如上程序,如果执行的文件超过1G, 如果使用如上的方式,就会在内存中生成一个aa对象,且会占用内存1G的资源,如果硬件资源不是很充足的情况,这种方式是不可行的。

//如下模式,只需要遍历 aa 对象即可,并不会在内存中产生列表(执行结果是一样的):

[[email protected] python]# cat 2.py 
#! /usr/bin/python

aa = open('/tmp/asd.txt')
for line in aa:
    print line,
[[email protected] python]# python 2.py 
123
asd
zxd

其实 文件的方法中还有一个方法叫做 .next 此方法和 for循环是一样的 也是一行一行的做遍历

In [34]: aa = open('/tmp/asd.txt')

In [35]: aa.next()
Out[35]: '123\n'

In [36]: aa.next()
Out[36]: 'asd\n'

In [37]: aa.next()
Out[37]: 'zxd\n'
while循环 文件遍历

刚刚使用的 readline 其实就是一行一行的读取内容,当结束后 返回一个空的字符串,空的字符串 即为 False

In [39]: aa = open('/tmp/asd.txt')

In [40]: aa.readline()
Out[40]: '123\n'

In [41]: aa.readline()
Out[41]: 'asd\n'

In [42]: aa.readline()
Out[42]: 'zxd\n'

In [43]: aa.readline()
Out[43]: ''

In [44]: not aa.readline()
Out[44]: True

for 循环是 有一定的次数,循环结束后就会结束,那么 while是 给定一个条件,满足后就会退出,也就是我们刚刚看到的 读到最后,字符串返回一个 False 就结束。

[[email protected] python]# cat 2.py 
#! /usr/bin/python

aa = open('/tmp/asd.txt')
while True:     ## True 就执行语句
    line = aa.readline()    ## 读取每行的内容
    if not line:    ## 读到最后为空字符串,not 后即为 True, 就会执行 如下的 break 跳出循环
        break
    print line,
    
[[email protected] python]# python 2.py 
123
asd
zxd

注意点:

如上我写的每个程序,只是打开文件,没有执行标准的 .close

#! /usr/bin/python

aa = open('/tmp/asd.txt')
while True:
    line = aa.readline()
    if not line:
        break
    print line,
aa.close()

用python的时候,会经常遇到文件数据库的open,但总会不小心忘了close 用with open 语句就能很好的解决这个问题,它会在语句执行完后,自动执行close()

#! /usr/bin/python

with open('/tmp/asd.txt') as aa:
    while True:
        line = aa.readline()
        if not line:
            break
        print line,

执行结果:

[[email protected] python]# python 2.py 
123
asd
zxd

其实日常的文件遍历,如果内容比较小,我们完全可以使用 .read 这个方法来搞定,但是如果文件内容多,且很复杂,这就需要我们使用for 或者while 循环来搞定!

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2017/06/28,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • for循环 文件遍历
  • 读取文件 read ,readline , readlines
    • 使用脚本遍历文件内容:
    • while循环 文件遍历
    相关产品与服务
    数据库
    云数据库为企业提供了完善的关系型数据库、非关系型数据库、分析型数据库和数据库生态工具。您可以通过产品选择和组合搭建,轻松实现高可靠、高可用性、高性能等数据库需求。云数据库服务也可大幅减少您的运维工作量,更专注于业务发展,让企业一站式享受数据上云及分布式架构的技术红利!
    领券
    问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档