使用for循环遍历文件

简介: 使用 Python 访问文件,首先得先打开文件,在 Python 下打开文件可以使用 open 内置函数openr——以只读方式打开w——以写的方式打开a——以追加模式打开r+——以读写模式打开w+——以读写模式打开(参见w)a+——以读写模式打开(参见a)rb——以二进制读模式打...

使用 Python 访问文件,首先得先打开文件,在 Python 下打开文件可以使用 open 内置函数

open

r——以只读方式打开
w——以写的方式打开
a——以追加模式打开
r+——以读写模式打开
w+——以读写模式打开(参见w)
a+——以读写模式打开(参见a)
rb——以二进制读模式打开(binary)
wb——以二进制写模式打开(参见w)
ab——以二进制追加模式打开(参见a)
rb+——以二进制读写模式打开(参见r+)
wb+——以二进制读写模式打开(参见w+)
ab+——以二进制读写模式打开(参见a+)

with open

我们试着打开一个文件如下:

In [1]: open('/tmp/tmp.txt')
Out[1]: <open file '/tmp/tmp.txt', mode 'r' at 0x1ba6150>

In [2]: fd=open('/tmp/tmp.txt')     #用一个参数fd接收一下

In [3]: type(fd)              #可以看到fd是文件类型
Out[3]: file

文件会有很多方法可以使用,比如 fd.close,打开一个文件也需要关闭它:

In [4]: fd.
fd.close       fd.flush       fd.next        fd.seek        fd.writelines
fd.closed      fd.isatty      fd.read        fd.softspace   fd.xreadlines
fd.encoding    fd.mode        fd.readinto    fd.tell        
fd.errors      fd.name        fd.readline    fd.truncate    
fd.fileno      fd.newlines    fd.readlines   fd.write       

In [5]: fd.close()         #关闭文件

然后我们再已读写的方式打开之前那个文件:

In [6]: fd=open('/tmp/tmp.txt','w')          #以读写的方式打开这个文件

In [7]: fd
Out[7]: <open file '/tmp/tmp.txt', mode 'w' at 0x1ba6270>

In [8]: fd.wri
fd.write       fd.writelines  

In [8]: fd.write("a")                        #往文件里面写入一个a,在这个时候会覆盖文件原有的内容

In [9]: fd.clo
fd.close   fd.closed  

In [9]: fd.close()                               接着我们关闭这个文件

接着我们以读写的方式写入一个“123”,然后再往文件里面追加一个“456”:

In [10]: fd=open('/tmp/tmp.txt','w')

In [11]: fd.write("123\n")

In [12]:

In [12]: fd.close()

In [13]:

In [13]: fd=open('/tmp/tmp.txt','a')

In [14]: fd.write("456\n")

In [15]: fd.close()

文件内容变化如下:

[root@izj6cdhdoq5a5z7lfkmaeaz ~]# cat /tmp/tmp.txt
123
[root@izj6cdhdoq5a5z7lfkmaeaz ~]#
[root@izj6cdhdoq5a5z7lfkmaeaz ~]# cat /tmp/tmp.txt
123
456

以只读模式打开文件如下:

In [16]: fd=open('/tmp/tmp.txt','r')

In [17]: fd.read()                  
Out[17]: '123\n456\n'

In [18]: fd.read()                   
'''因为读取第二遍的时候是往后读取的,
后面没有内容,所以返回的就是空的'''

Out[18]: ''

In [19]: fd.read()
Out[19]: ''

read方法的比较:

In [19]: fd.read()                  #返回的是一个字符串
Out[19]: ''

In [20]: fd.readline()            #返回的是一个字符串
Out[20]: ''

In [21]: fd.readlines()          #返回的是一个列表
Out[21]: []

我们把打开一个文件的操作脚本写入一个文件:

[root@izj6cdhdoq5a5z7lfkmaeaz ~]# cat openfile.py
#!/usr/local/python3/bin/python

fd=open("/tmp/tmp.txt")
for i in fd.readlines():
    print(i)
[root@izj6cdhdoq5a5z7lfkmaeaz ~]#
[root@izj6cdhdoq5a5z7lfkmaeaz ~]# python openfile.py
123

456

[root@izj6cdhdoq5a5z7lfkmaeaz ~]#

由上面我们可以看到打开文件内容默认会显示空行,我们去掉空行,如下所示:

[root@izj6cdhdoq5a5z7lfkmaeaz ~]# cat openfile.py       
#!/usr/local/python3/bin/python

fd=open("/tmp/tmp.txt")
for i in fd.readlines():
    print(i,end='')
[root@izj6cdhdoq5a5z7lfkmaeaz ~]#
[root@izj6cdhdoq5a5z7lfkmaeaz ~]#
[root@izj6cdhdoq5a5z7lfkmaeaz ~]#
[root@izj6cdhdoq5a5z7lfkmaeaz ~]# python openfile.py
123
456
[root@izj6cdhdoq5a5z7lfkmaeaz ~]#

我们一般建议在实际读取文件的时候去掉 read 方法,因为当文件非常大的时候,读取出来将消耗很大一部分的内存,一般直接进行如下代码即可:

[root@izj6cdhdoq5a5z7lfkmaeaz ~]# cat openfile.py   
#!/usr/local/python3/bin/python

fd=open("/tmp/tmp.txt")
for i in fd:       #这样遍历的就是一个对象,对象会一行一行的取值读出来
    print(i,end='')
[root@izj6cdhdoq5a5z7lfkmaeaz ~]#
[root@izj6cdhdoq5a5z7lfkmaeaz ~]#
[root@izj6cdhdoq5a5z7lfkmaeaz ~]# python openfile.py
123
456
[root@izj6cdhdoq5a5z7lfkmaeaz ~]#
目录
相关文章
|
2月前
|
存储 C++ 容器
【C++11】 基于范围的for循环
【C++11】 基于范围的for循环
23 0
|
5月前
|
程序员 C++
|
7月前
|
Java
for循环
Java for循环是一种用于迭代和重复执行代码块的循环结构。它可以用于遍历数组、集合、字符串等数据结构,也可以用于执行一些固定次数的操作。Java for循环包括三个部分:初始化语句、条件语句和迭代语句。初始化语句用于初始化循环控制变量,条件语句用于检测循环是否继续,迭代语句用于更新循环控制变量的值。
26 0
|
10月前
|
Python
for循环与if判断语句的运用
for循环与if判断语句的运用
71 0
|
10月前
|
编译器 C++ 容器
C++11之基于范围的for循环
C++11之基于范围的for循环
73 0
|
文件存储
ModelBuilder中的For循环和While循环
鸽了这么久了的ModelBuilder教程,开始恢复更新了,嘤嘤嘤 现在开始讲迭代器,迭代是指以一定的自动化程度多次重复某个过程,通常又称为循环。说的通俗点就是批量循环处理,简称批处理。
97 0
|
C语言
For循环中,只能`i++`或者`++i`吗?
For循环中,只能`i++`或者`++i`吗?
108 0
|
程序员
C+++——基于范围的for循环
如标题字面意思,就是要基于范围,for循环
107 0
|
存储 索引
for循环比较
for循环比较
96 0