Python 文件

字符编码介绍

我们在电脑上看见的图片,文本等内容在机器里其实就是一些二进制数,按照某种方法来显示字符,比如‘一’用什么来表示,这称之为编码,而将二进制按照某种方法解析显示出来称之为解码。

最开始是由美国提出了 ASCII码 用来表示英文字母以及其他字符,而我们要想用中文交流,也必须开发出能够表示中文的编码,于是GB码,或国标码产生了。

常见字符编码

ASCll码 :一个英文字母占1个字节
BIG5 :使用繁体中文社区中最常用的电脑汉字字符集标准
GBK :该编码几乎涵盖了所有的中文汉字
UNICODE :UNICODE编码又称万国码,几乎包含全世界所有文字
UTF-8 :UTF-8是目前用的最多的编码,是 unicode 的简化

编码与解码

编码

编码就是把人能看懂的文字翻译成机器能看懂的语言
解码就是将计算机能够直接读懂的字符解码成人类能够读懂的字符

编码的语法: encode()

代码示例:
		x = '你好'
		print(x.encode('utf8'))
输出结果:
		b'\xe4\xbd\xa0\xe5\xa5\xbd'

通过encode方法,我们可以指定某种格式来对文字进行编码,上面使用了utf8下
面使用gbk格式来运行

代码示例:
		print(x.encode('gbk'))
输出结果:
		b'\xc4\xe3\xba\xc3'

我们可以看到同样的文字用不同的标准会有不同的结果。
转换后的结果是bytes类型
解码
解码的语法: decode()

代码示例:
		x = b'\xce\xd2\xd5\xe6\xba\xc3\xbf\xb4'
		print(x.decode('gbk'))
输出结果:
		我真好看

这是用gbk的标准来进行翻译的,若是用别的标准来翻译会出现乱码。

代码示例:
		x = '我真好看'
		y = x.encode('gbk')
		print(y.decode('euc_kr'))
输出结果:
		乖廬봤였


'''
python2解释器默认的编码是ASCII码
python3解释器默认的编码是utf8
我们可以在文件头告诉解释器使用指定的编码,例如 coding:utf8 或者美化写
法  -*- coding:utf8 -*-  
'''

文件简介

文件就是操作系统暴露给用户可以直接操作硬盘的快捷方式
文件操作的流程:

1.打开文件、创建文件
2.编辑文件内容
3.保存文件内容
4.关闭文件

基本语法

  1. 语法结构一 必须要使用close关闭文件
	f1 = open(file, mode='r', encoding=None)
    f1.close()
  1. 语法结构二 自动关闭文件
	with open(file, mode='r', encoding=None) as f:
        pass
file: 必需,文件路径(相对或者绝对路径)。
mode: 可选,文件打开模式
encoding: 一般使用utf8

俩种结构都要用到文件的路径,路径可以分为绝对路径和相对路径,相对路径是当和要打开的文件在同一个目录下的时候可以使用。绝对路径就是文件在计算机的详细地址。

文件的读写

我们可以通过代码对文件进行读写操作

主要有三种模式需要我们熟记的,分别是 r w a 

r 模式:(只读)
	 在此模式下只能对文件进行读的操作,没有写的功能
w 模式:(只写)
	 在此模式下只能对文件进行写的操作,没有读的功能
	 而且若是没有该文件,w 模式会创建一个文件,若是有文件,会清空了在写
a 模式:(追加)
	 在此模式下有对文件进行追加内容的功能。没有文件也会创建一个文件,但
	 不清空



代码示例:

	with open('a.txt','r',encoding='utf8') as f:
	    print(f.read())

	with open('a.txt','w',encoding='utf8') as f:
	    print(f.write('1'))

	with open('a.txt','a',encoding='utf8') as f:
	    print(f.write('1'))

with 结构可以同时打开多个文件

代码示例:
		url = 'F:\桌面\yu.jpg'
		with open(url, 'rb') as f:
		    y = f.read()
		    print(y)
		with open('F:\桌面\y1.jpg', 'wb') as g:
		    g.write(y)
		    
和下面的代码同个效果
		url = 'F:\桌面\yu.jpg'
		with open(url, 'rb') as f, open('F:\桌面\y1.jpg', 'wb') as g:
		    y = f.read()
		    print(y)
		    g.write(y)

文件的操作方法

t 模式
	 是默认的文本模式
	 该模式下只能操作文本文件
	 该模式必须指定encoding参数,不指定会使用默认计算机的编码
	 该模式读写都是以字符串为最小单位
b 模式
	二进制模式。
	可以操作任意类型的文件
	该模式可以操作'任意类型'的文件
    '该模式不需要指定encoding参数'
    该模式读写都是以bytes类型为最小单位


'其中俩种模式又分为 r w a 模式,也就是 rt wt at 以及 rb wb ab '
		
		r	rt
        w	wt
        a	at
上面三种在文件的读写中的一样。

		rb  不能省略b
        wb  不能省略b
        ab  不能省略b

b模式下的 r w a 模式不太一样。
代码示例:
		with open('a.txt', 'rb') as f:
		    print(f.read())
此时输出的是 
		b'\xe4\xbd\xa0\xe7\x9c\x9f\xe5\xa5\xbd\xe7\x9c\x8b'	

代码示例:
with open('a.txt', 'wb') as f:
    f.write(b'\xe6\x88\x91\xe7\x9c\x9f\xe5\xa5\xbd\xe7\x9c\x8b')
    

文件内置方法

read()  # 一次性读取文件内容
	1.执行完之后光标在文件末尾 继续读取没有内容
    2.当文件内容特别大的时候 容易造成内存溢出(满了)
readline()  # 一次只读一行内容
readlines()  # 结果是一个列表 里面的各个元素是文件的一行行内容
readable()  # 判断当前文件是否可读
支持for循环  # 逐行读取文件内容(推荐使用)内存中同一时刻只会有一行内容
write()  # 写入文件内容(字符串或者bytes类型)
writelines()  # 可以将列表中多个元素写入文件
writable()  # 判断文件是否可写
flush()  # 相当于主动按了ctrl+s(保存)
seek()  # 用于移动文件读取指针到指定位置。
read()
read()  

此方法没有指定参数时,会读出文件所有的内容,我们可以给他一个参数让他返回
指定的内容

下列代码中的 shiyan.txt 中含有文字 : abc今天的天气真热

代码示例:('在文本模式下,括号内的数字表示为读取N个字符'with open('shiyan.txt', 'r', encoding='utf8') as f:
		    print(f.read(1))

输出结果:
		
		会将shiyan.txt文件中的第一个字读出来,也就是 a

代码示例:('二进制模式下,括号内的数字表示的是读取指定的字节数'with open('shiyan.txt', 'rb') as f:
		    print(f.read(6).decode('utf8'))

输出结果:
		
		会将shiyan.txt文件中的 abc今 读出来,因为在 utf8 中,中文
		用3个字节表示,英文用1个字节表示,所以我们指定6个字节时,会输
		出3个英文1个中文

		
seek() 改变光标
seek() 方法语法如下:

		fileObject.seek(offset[, whence])

offset  是表示需要移动的'字节数',默认从后移动,负数向前移动。
whence  只有 3 个参数,分别为 012 。默认为 0 
		0 代表从文件开头开始算起,
		1 代表从当前位置开始算起,
		2 代表从文件末尾算起。

也就是光标在某一个位置向前或向后移动指定的'字节数'
我们打开文件调用read()后,文件的所有内容被读取,此时光标就在文本的尾部
我们可以通过 seek() 方法来改变光标到位置。
代码示例:(文本状态下)
文件 shiyan.txt 中含有文字:   abc今天的天气真热

	with open('shiyan.txt', 'r' ,encoding='utf8') as f:
	    print(f.read())
	    print(f.read())
	    
执行完第一个read之后光标就在文本的尾部了,所以第二个read是读不出数
据的。	    
当我们使用 seek()with open(r'shiyan.txt', 'r', encoding='utf8') as f:
		    print(f.read())
		    f.seek(3, 0)
		    print(f.read())
		    
光标重新回到开头,并向后偏移3'字节',所以第二个read的是除去首位3个剩
下的,在文本模式下移动光标到尾部有可能报错,在二进制下的话都可以。

代码示例一:(二进制状态下)
文件 shiyan.txt 中含有文字:   abc今天的天气真热
		
		with open(r'shiyan.txt', 'rb') as f:
		    print(f.read(6).decode('utf8'))
		    f.seek(3, 0)
		    print(f.read().decode('utf8'))
		 
输出结果:
		abc今
		今天的天气真热

此时光标回到头部并向右偏移3个字节。

'在二进制状态下,中文对应3个字节,光标也可以改变到任意位置'

代码示例二:(光标对应末尾)

	with open(r'shiyan.txt', 'rb') as f:
	    print(f.read(6).decode('utf8'))
	    f.seek(-3, 2)
	    print(f.read().decode('utf8'))
	 
输出结果:
		abc今
		热
	 
此时光标回到尾部并向左偏移3个字节。

代码示例三:(光标对应当前位置)

		with open(r'shiyan.txt', 'rb') as f:
		    print(f.read(3).decode('utf8'))
		    f.seek(-3, 1)
		    print(f.read().decode('utf8'))

输出结果:
		abc
		abc今天的天气真热

示例三中,首先读取了3个字节,光标在当前位置下向前偏移3个字节,相当于回到
了开头。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值