python读写文件简介(入门)

@python读写文件简介(入门)TOC

本文主要介绍了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读直到EOFEOF是一个空字符),并将已经读到的行按行存到一个列表里返回。

  • 实例
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
  1. “r” read only
  2. “w” write only (will overwrite)
  3. “rb” open in binary mode, if it’s followed by “file.read(1)” then it will be read byte by byte
  4. “wb” open in binary mode, writing with bytes…(HOW)
  5. “a” append if you want to add to the existed file
    更多模式可见python官方文档

如有问题,欢迎指出或补充~

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值