本文主要介绍了python读文件相关函数和写文件相关函数。由于是入门文档,在最后介绍了一下打开、关闭文件和文件模式的相关使用,如果对这一部分不清楚的话,可以先看后面。
读文件
读文件主要有三个函数read()
, readline()
, readlines()
,下面逐一介绍~
read(size)
read()
函数支持传入一个参数,size表示你想读几个bytes或characters(读的是byte还是character取决于你用什么mode打开这个文件,本文最后介绍了一下mode有哪些,如有需要,可供参考^ ^)
如果不传入size表示全部读出来。
如果size=-1就什么也不读。- 实例:
with open(“test.txt”,”rb”) as f1:
f1.read(1)
f1.read()
上述程序会先read一个byte,再把剩下的byte读完·
readline(size)
size用法和read(size)
中size一样。下面假设以“rb”
模式打开文件。
readline
会一行一行地读,需要注意的是,size表示在这一行中读多少byte。
如果size数大于这一行的byte数,那么读到这一行结束(不再接着往下读);如果size数小于这一行的byte数,那么就读size数的字节,如果再次调用readline(size)
,程序会从上一次读结束的位置接着往后读,同样读到该行的结尾停止。
可以通俗的理解成,readline
提供了一个“读限制”:使用readline读文件时,不管size设置多大,readline至多把当前这一行读完;如果你想读下一行,只能再调用一次readline。
- 实例
对于文件dog_breeds.txt
如下:
Pug
Jack Russell Terrier
English Springer Spaniel
German Shepherd
Staffordshire Bull Terrier
Cavalier King Charles Spaniel
Golden Retriever
West Highland White Terrier
Boxer
Border Terrier
使用readline()
:
with open('dog_breeds.txt', 'r') as reader:
# Read & print the first 5 characters of the line 5 times
print(reader.readline(5))
# Notice that line is greater than the 5 chars and continues
# down the line, reading 5 chars each time until the end of the
# line and then "wraps" around
print(reader.readline(5))
print(reader.readline(5))
print(reader.readline(5))
print(reader.readline(5))
readlines()
readlines
函数的实现机理是不停的调用readline
读直到EOF
(EOF
是一个空字符),并将已经读到的行按行存到一个列表里返回。
- 实例
f = open('dog_breeds.txt')
f.readlines() # Returns a list object
output:
['Pug\n', 'Jack Russell Terrier\n', 'English Springer Spaniel\n', 'German Shepherd\n', 'Staffordshire Bull Terrier\n', 'Cavalier King Charles Spaniel\n', 'Golden Retriever\n', 'West Highland White Terrier\n', 'Boxer\n', 'Border Terrier\n']
和下面这段代码效果一样:
f = open('dog_breeds.txt')
list(f)
# ['Pug\n', 'Jack Russell Terrier\n', 'English Springer Spaniel\n', 'German Shepherd\n', 'Staffordshire Bull Terrier\n', 'Cavalier King Charles Spaniel\n', 'Golden Retriever\n', 'West Highland White Terrier\n', 'Boxer\n', 'Border Terrier\n']
readlines
支持传入size,但是这个size不大好用,我感觉似乎是读到含有的总byte数和size最接近且大于等于size的那一行结束。(很绕口,说人话就是,比如size是20,前两行有字节数18,前三行有字节数27,她读到第二行发现没读够20个,就再读一行,发现大于等于20了,读够了,那她就读到第三行结束)
搜了一些博客都没有解释readlines
传入size后的使用,上述理解如有不当,欢迎指出^ ^
Iterating over lines when reading file
迭代每一行很简单,有几种方法供你选择:
while + readline
with open(“test.txt”,”r”) as f:
line = f.readline()
while line != “”: # “” means EOF
print(line)
line = f.readline()
readlines + for
with open(“test.txt”,”r”) as f:
for line in f.readlines():
print(line)
直接迭代
with open(“test.txt”,”r”) as f:
for line in f:
print(line)
如果试了上面的代码,你可能会发现,怎么打印一行还空一行呢。因为你读取的line字符串中结尾有一个换行符,print函数默认又会输出一个换行符,两个叠加起来,可不就是打印一行空一行了。如果想要避免这种情况,可以使用print(line, end=“”),控制一下print的默认输出,不要在结尾输出换行符了,输出一个空字符(也就是什么都不输出)就行。
写文件
写文件相对比较简单啦。
write(string)
with open(“test.txt”,”r”) as f:
line_list = f.readlines()
with open(“test.txt”,”a”) as f:
for line in reverse(line_list):
f.write(line)
writelines(seq)
with open(“test.txt”,”r”) as f:
line_list = f.readlines()
with open(“test.txt”,”a”) as f:
f.writelines(line_list)
需要注意的是,writelines将序列写入文件,不追加任何行尾添加到每个序列项,添加适当的行由你决定。所以有些情况下要记得加换行符呀……^ - ^
其他
因为是入门教程,所以再简单介绍一下open()
, close()
, 和python支持的mode options
open 和 close
file = open(“test.txt”)
,如果这样使用open
的话,别忘了close哦file.close()
。
所以通常使用with
来简化打开关闭文件的过程:
with open(“test1.txt”) as file:
with
也支持打开多个文件:
with open(“test1.txt”) as f1, open(“test2.txt”) as f2:
mode
- “r” read only
- “w” write only (will overwrite)
- “rb” open in binary mode, if it’s followed by “file.read(1)” then it will be read byte by byte
- “wb” open in binary mode, writing with bytes…(HOW)
- “a” append if you want to add to the existed file
更多模式可见python官方文档
如有问题,欢迎指出或补充~