python 文件操作

打开文件
file_object = open(file_name, access_mode='r', buffering=-1,[encoding='编码方式'])  
'''
功能:打开一个文件,返回一个文件对象。
参数:
1. file_name  : 文件名; (写绝对/相对路径)
2. access_mode: 打开文件的方式,默认为 r
3. buffering  1表示有行缓冲,默认则表示使用系统默认提供的缓冲机制。(缓冲区)
4. encoding: windows下一般为GBK,Linux下一般为utf-8
返回值:成功返回文件操作对象。
'''

文本文件既可以用文本模式打开,也可以用二进制模式打开。
如果以文本形式打开,需以字符修改。

access_mode操作
r以读方式打开 文件必须存在
w以写方式打开,文件不存在则创建,存在清空原有内容
a以追加模式打开
r+以读写模式打开 文件必须存在
w+以读写模式打开文件
a+以读写模式打开 不存在则创建,存在则追加模式

以二进制文件打开的文件,需以字节串的方式修改。
二进制文件必须以二进制模式打开,如果以文本方式打开,读写时会报错.因为不是所有的二进制都有文本。

access_mode操作
rb以二进制读模式打开 作用同r
wb以二进制写模式打开 作用同w
ab以二进制追加模式打开 作用同a
rb+以二进制读写模式打开 作用同r+
wb+以二进制读写模式打开 作用同w+
ab+以二进制读写模式打开 作用同a+
读取文件
read([size])
'''
功能: 用来直接读取文件中字符。
参数: 如果没有给定size参数(默认值为-1)或者size值为负,文件将被读取直至末尾,
      给定size最多读取 给定数目个字符(字节)。size写成几就表示读取多少个字符
      太大的文件不建议用read()
返回值: 返回读取到的内容   
'''

注意:文件过大时候不建议直接读取到文件结尾,读到文件结尾会返回空字符串。

readline([size])
'''
功能: 读取文件中一行
参数: 如果没有给定size参数(默认值为-1)或者size值为负,表示读取一行,
      给定size表示最多读取指定的字符(字节)
返回值: 返回读取到的内容
'''
readlines([sizeint])
'''
功能: 读取文件中的每一行,返回一个列表,每一行为列表中的每一个元素
参数: 如果没有给定size参数(默认值为-1)或者size值为负,文件将被读取直至末尾,
给定size表示读取到size字符所在行为止。(读取到该字符所在的行)
返回值: 返回读取到的内容列表
'''

文件对象本身也是一个可迭代对象,在for循环中可以迭代文件的每一行
在一个程序里面读文件,下次再读都是继续往下读,不是从头开始读

示例
#打开文件
#读写方式打开已存在的文件 test
f = open('test','r')

#读操作
#循环读取文件,每次读取26个字符,读到文件结尾时返回空字符串
while True:
	data = f.read(26)
	#读到文件结尾,跳出循环
	if not data:
		break
	print('读取到的数据:',data)

#关闭
f.close()
写入文件

write(string)
功能: 把文本数据或二进制数据块的字符串写入到文件中去
参数:要写入的内容
返回值:写入的字符个数

  • 如果需要换行要自己在写入内容中添加\n

writelines(str_list)
功能:接受一个字符串列表作为参数,将它们写入文件
参数: 要写入的内容列表

  • 如果需要换行要自己在写入内容中添加\n
示例
'''
将一个文件拷贝一份,重新取另外一个名字
文件可能是文本,也可能是二进制
'''
filename = input('文件:')
#以二进制读方式打开,文件需存在
fr = open(filename,'rb')
#以二进制写方式打开,没有就新建
fw = open('备份‘+filename,'wb')

#为防止文件特别大,循环读取,一次读1024字节
while True:
	data = fr.read(1024)
	#读完会返回空,跳出
	if not data:
		break
	fw.write(data)
fr.close()
fw.close()
with操作

with语句用于对资源进行访问的场合,保证不管处理过程中是否发生错误或者异常都会执行规定的“清理”操作,释放被访问的资源,比如文件读写后自动关闭、线程中锁的自动获取和释放等。

语法:
with context_expression [as obj]:

with open('file','r+') as f:	# open得到的对象等于f,结束时with语句会自动销毁f,所以不需要额外close
	f.read()
文件偏移量

1. tell()函数:获取文件偏移量大小

f = open('test','w+')
f.write('Hello world')
print('偏移量:,f.tell())	#获取文件偏移量,打印出:偏移量:11
data = f.read()
print(data)	#不会打印出数据,因为文件偏移到数据最后,后面就没有数据了

f.close()

注:以r/w的方式重新打开文件时,文件偏移量会重置;以a的方式重新打开文件时,文件偏移量会在末尾

f = open('test','w+')
f.write('Hello world')
f.close()	#关闭文件
f = open('test','r')	#重新打开文件
data = f.read()
print(data)	#此时就能读取到数据

f.close()

2. seek(offset[,whence]):移动文件偏移量位置
参数:
offset代表相对于某个位置移动的字节数,正数表示向后移动,负数表示向前移动
whence是基准位置的默认值为0,代表从文件开头算起,1代表从当前位置算起,2代表从文件末尾算起(必须以二进制打开文件时基准位置1或2才能使用),所以打开使用seek()时一般以二进制打开

f = open('test','w+')
f.write('Hello world')
f.seek(0,0)	#以开头为基准,移动0个位置
data1 = f.read()
print(data1)	#此时就可以打印出来:Hello world
f.seek(5,0)	#以开头为基准,移动5个位置
data2 = f.read()
print(data2)	#打印出: world
f.close()
f = open('test','wb+')		#以二进制方式打开
f.write(b'Hello world')
f.seek(-5,2)	#将文件偏移量定位到开头
data = f.read()	
print(data)	#打印出:b'world'

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值