python学习笔记(文件、上下文管理器、print()方法的的补充)

文件

打开文件

打开文件:f = open(name[, mode])
name : 一个包含了你要访问的文件名称的字符串值。
mode : mode 决定了打开文件的模式:只读,写入,追加等。所有可取值见如下的完全列表。这个参数是非强制的,默认文件访问模式为只读。

常见的文件打开模式:

ModeDescription
r以只读方式打开文件。
rb以二进制格式打开一个文件用于只读
r+打开一个文件用于读写。
rb+以二进制格式打开一个文件用于读写。
w打开一个文件只用于写入。如果该文件已存在则打开文件,并从开头开始编辑,即原有内容会被删除。如果该文件不存在,创建新文件。
wb以二进制格式打开一个文件只用于写入。
w+打开一个文件用于读写。
wb+以二进制格式打开一个文件用于读写。
x独占写入模式。
a打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾,新的内容将会被写入到已有内容之后。如果文件不存在,创建新文件进行写入。
ab以二进制格式打开一个文件用于追加。
a+打开一个文件用于读写。
ab+以二进制格式打开一个文件用于追加。

说明

  1. 文件打开时文件的指针将会放在文件的开头,文件从头输出到尾不会自动重新将指针指向文件的开头。
  2. 独占写入模式x,在文件已经存在的时候回发出FileExistsError异常。
  3. 如果写入模式想从既有文件末尾继续写入,可以使用附加模式a

关闭文件

打开文件对文件进行了相应的操作后需要关闭文件,尤其是在写入文件时,因为在写入文件时Python可能缓冲写入的数据,如果此时程序崩溃了文件写入的内容将不会被成功的写入。
两个方法关闭文件:

  1. 使用try: ... finally:...
# 打开文件
f = open('xxx.txt')
try:
	# 对文件进行相应的操作
finally:
	f.close()
  1. 使用with语句
with open('xxx.txt') as f:
	# 对文件进行相应的操作

此处的with是上下文管理器。

上下文管理器

任何实现了 __enter__()__exit__()方法的对象都可以成为上下文管理器。

__enter__() 方法会在执行 with 后面的语句时执行,用来处理操作前的内容。
__exit__() 方法会在 with 内的代码执行完毕后执行,用来进行文件的关闭,数据库的关闭等。
例:自己写with open函数:

class File():
	def __init__(self,filename,mode):
		self.filename = filename
		self.mode = mode
	
	def __enter__(self):
		self.f = open(self.filename, self.mode)
		return self.f
	
	def __exit__(self, *args):
		self.f.close()

	
With File('xxx.txt','w') as f:
		F.write('xxx')

file 对象方法

file.read([size]):size 未指定则返回整个文件,如果文件大小 >2 倍内存则有问题,f.read()读到文件尾时返回""(空字串)。

file.readline():返回一行。

file.readlines([size]):返回包含size行的列表, size 未指定则返回全部行。

f.write("hello\n"):如果要写入字符串以外的数据,先将他转换为字符串。

f.tell():返回一个整数,表示当前文件指针的位置(就是到文件头的比特数)。

f.seek(偏移量,[起始位置]):用来移动文件指针。
起始位置: 0 - 文件头, 默认值; 1 - 当前位置; 2 - 文件尾

f.writelies:接受一个字符串写入文件中,写入时不会添加换行符,需要自行添加。

f.close():关闭文件。

示例测试使用文件方法(详细说明)

'''
创建一个文件,其中内容为:
This is a text program
Welcome to this file
Python
'''
# 读取文件内容
>>> f = open(r'test.txt')
>>> f.read()
'This is a text program\nWelcome to this file\nPython'
>>> f.close()

# 使用with打开文件,会自动关闭
>>> with open('test.txt') as f:
...     f.read()
'This is a text program\nWelcome to this file\nPython'

# `w`模式打开文件,会创建文件并重写文件。
>>> f = open(r'test.txt','w')
>>> f.close()

# `x`模式打开文件,如果文件存在就会报错。
>>> f = open(r'test.txt','x')
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
FileExistsError: [Errno 17] File exists: 'test.txt'

# 使用`r+`模式打开文件
>>> f = open(r'test.txt','r+')
# 写入文字
>>> f.write('Hey')
3
# 文件指针偏移,只会从当前位置进行文件操作
>>> f.read()
's is a text program\nWelcome to this file\nPython'
>>> f.read()
''
>>> f.close()

>>> f = open(r'test.txt','r+')
>>> f.read()
'Heys is a text program\nWelcome to this file\nPython'
# 文件写入会从文件指针处开始写入,如果文件存在内容即会覆盖当前的内容。

>>> f = open(r'test.txt','w')
# 使用`w`模式,写入时会重写整个文件。
>>> f.write('Heym')
4
>>> f.close()
>>> f = open(r'test.txt','r')
>>> f.read()
'Heym'
>>> f.close()

# readline读取一行,也可以传参读取指定的字符数。
# readlines读取整个文件所有内容。
>>> f = open(r'test.txt')
>>> f.readline()
'This is a text program\n'
>>> f.readline(2)
'We'
>>> f.readlines()
['lcome to this file\n', 'Python']

# tell()获取当前文件指针的位置。
>>> f.tell()
50
# seek()调整指针的位置
>>> f.seek(0)
0
>>> f.readlines()
['This is a text program\n', 'Welcome to this file\n', 'Python']
>>> 

print()方法的的补充

print()也可以对文件进行写入。
print(*objects, sep=' ', end='\n', file=sys.stdout, flush=False)
objects:表示可以一次输出多个对象。输出多个对象时,需要用 , 分隔。
sep:用来间隔多个对象,默认值是一个空格。
end:用来设定以什么结尾。默认值是换行符 \n,我们可以换成其他字符串。
file:要写入的文件对象。
flush:输出是否被缓存通常决定于 file,但如果 flush 关键字参数为 True,流会被强制刷新。

例:

>>> f = open('test.txt','w')
>>> print('First','line',file=f)
>>> print('Second','line',file=f)
>>> print('Third','and final','line',file=f)
>>> f.close()
>>> lines = list(open('test.txt'))
>>> lines
['First line\n', 'Second line\n', 'Third and final line\n']
>>> first, second, third = open('test.txt')
>>> first
'First line\n'
>>> second
'Second line\n'
>>> third
'Third and final line\n'
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值