python_文件操作

  • 什么是文件
    文件是数据存储的单位
    文件通常用来长期存储数据
    文件中的数据是以字节为单位进行顺序存储的
  • 文件的操作流程
    1.打开文件
    2.读写文件
    3.关闭文件
    任何的操作系统,一个应用程序同时打开文件的数量有最大数限制
  • 文件的打开函数 open
open(file,mode='rt')用于打开一个文件,返回此文件对应的文件流
对象,如果打开失败,则会OSError错误
  • 文件的关闭方法:
F.close()	关闭,释放系统资源

示例:

#Python没有文件错误相关的机制,不像C语言返回0
#故执行文件操作一定要进行异常处理
try:
	#f = open('/etc/passwd')		#文件能成功打开
	f = open('/root/abc.txt')		#此文件不存在
	print('文件打开成功')
except OSError:			#OSError包含一系列文件相关的异常
	print('文件打开失败')
  • python文件读写的类型有两种:
    文本文件(text file)
    二进制文件(binary file)

  • 文本文件的操作
    默认文件中存储的都为字符数据,以行为单位进行分隔,在python内部统一用‘\n’作为换行进行分隔
    对文本文件读写需要用字符串(str)进行数据读取和写入

  • 各种操作系统的换行符:

    Linux换行符:			'\n'
    Windows换行符:			'\n\r'
    旧的Macintosh换行符:	'\r'
    新的Mac Os换行符:		'\n'
    
  • 文件当中常用的方法:

F.readline()	#读取一行数据,如果到达文件尾则返回空行
F.readlines()	#返回每行字符串的列表
F.read(size=-1)	#从文件流中最多读取size个字符,类似readline
F.writelines(lines)	#将多行文本读入文件内,lines可为list等
F.flush() 	#强制清空缓冲区,能使内容不足磁盘块也写入磁盘

#二进制文件操作方法
F.tell()		#返回当前文件的读写位置
F.seek(offset,whence=0)	#改变数据流的位置,返回新的绝对位置
  • 文件的模式字符:

    'r'		以只读方式打开(默认)
    'w'		以只写方式打开,删除原有文件内容(如果文件不存在,则创建)
    'x'		创建一个新文件,并以写模式打开,如果文件存在则有FileExistsError错误
    'a'		以只写文件打开一个文件,如果有文件则追加到文件尾
    'b'		以二进制模式打开
    't'		文本模式打开(默认)
    '+'		为更新内容打开一个磁盘文件(可读可写)
    
    缺省模式是:'rt'
    'w+b'可以实现二进制随机读写,当打开文件时,文件内容将被清零
    'r+b'以二进制读和更新模式打开文件,打开文件时不会清空文件内容
    'r+' 以文本模式读和更新模式打开文件,打开文件时不会清空文件内容
    

示例1:

#此示例readline()用法:
def read_text_date():
	try:
		f = open('info.txt')
		#print('文件打开成功')
		while True:
			s = f.readline()
			if s != '':
				if s[-1]=='\n':		#readline会默认将末尾
					print(s[:-1])	#的\n同时打印,不做处理
				else:				#会出现换两次行
					print(s)
			else:
				print('文件内没有内容')
				break
		f.close()
	except OSError:
		print('文件打开失败')

示例2:

#示意f.writelines()的用法
f = open('abc.txt','w')
L = ['我是第一行\n','我是第二行']
f.writelines(L)
f.close()
  • 文本文件的迭代读取
    open函数返回来的文件流对象是可迭代对象

示例:

f = open('abc.txt')
#每次取出一行,相当于line = f.readline()
for line in f:
	print(line)
f.close()
  • 标准输入输出文件
    模块名:sys
    sys.stdin(默认为 标准键盘输入设备)
    ctrl + d 为文件末尾标识符(linux,mac)
    sys.stdout(默认为屏幕终端)
    sys.stderr (默认为屏幕终端)
  • 二进制文件操作:
    'b’二进制文件操作
    对于二进制文件的读写通常需要用字节串(bytes)进行操作
  • F.seek()方法(二进制文件操作)
F.seek(偏移量,whence=相对位置)
偏移量:
		大于0代表向文件末尾方向移动
		小于0代表向文件头方向移动
相对位置:
	0	代表从文件头开始
	1	代表从当前读写位置开始偏移
	2	代表从文件尾开始偏移

示例:

#此程序示意从文件第5个位置开始读出5个字节(文件一共20个字节)
try:
	f = open('bin.txt','rb')
	print('当前的读写位置是:',f.tell())
	f.seek(5,1)		#相当于f.seek(-15,2)
	print('当前的读写位置是:',f.tell())
	s = f.read(5).decode('utf-8')
	print(s)
	f.close()
except OSError:
	print('文件打开错误')
  • 汉字编码

  • 一个汉字占多少个字节?
    GBK占2个字节(Windows)
    UTF-8占3个字节

  • 系列标准:

    国际系列:
    GB18030(二字节或四字节编码)
    	GBK(二字节编码)中国95年的标准,繁体简体字体
    		GB2312(二进制编码)中国80年的标准,6000多个汉字
    		(Windows常用)从下至上依次被包含
    国际标准:
    UNICODE  <-------->  UTF-8(1~6字节)
    (Linux / Mac OS X / IOS / Android常用)
    

在这里插入图片描述
在这里插入图片描述

  • python2与python3字符串与字节串编码区分:
	python2的字符串其实更应该称为字节串。 在python2里,bytes == str ,
	除此之外, python2里还有个单独的类型是unicode , 把字符串解码后,就会变成unicode。

	Python3 除了把字符串的编码改成了unicode, 还把str 和bytes 做了明确区分, 
	str 就是unicode格式的字符, bytes就是单纯二进制。
  在py3里看字符,必须得是unicode编码,其它编码一律按bytes格式展示。
  • python3字符串编码(encode)
'gb2312'
'gbk'
'gb18030'
'utf-8'
'ascii'
  • 编码注释:
    在源文件的第一行或第二行写入如下内容为编码注释
# -*-  coding:utf-8  -*-
#设置源文件编码为:utf-8

#-*-  coding:gbk  -*-
#设置源文件编码为:gbk,这样才能在windows上显示中文字符
  • 总结
 python3   文件默认编码是utf-8 , 字符串编码是 unicode
       以utf-8 或者 gbk等编码的代码,加载到内存,会自动转为unicode正常显示。

 python2   文件默认编码是ascii , 字符串编码也是 ascii , 如果文件头声明了是gbk,那字符串编码就是gbk。
       以utf-8 或者 gbk等编码的代码,加载到内存,并不会转为unicode,编码仍然是utf-8或者gbk等编码。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值