Python学习:字符编码及文件处理

时间:2023-01-05 19:39:24

本节理论颇多,结论一些,只写重点。

字符编码

    Python学习:字符编码及文件处理

 1.字符编码

  以什么编码存的就用什么编码取出

    PS:内存固定使用unicode编码,我们可以控制的编码是往硬盘存放或者基于网络传输选择的编码。

 2.数据是最先产生于内存中,是unicode格式,要想传输(1.网络2.硬盘)需要转成bytes格式

  #unicode------>encode(utf-8)--------->bytes

  拿到bytes,就可以往文件内存放,或者基于网络传输。

  #bytes--------->decode(utf-8)--------->unicode

个人认为,无论网络传输还是硬盘存放都是直接放在硬盘上,直接拿到bytes基本就是直接的二进制。

 3、pyhon3中字符串被识别成unicode

   python3中字符串encode得到bytes。

 4.了解

  python2中的字符串就想到于bytes

  python2中在字符串前加u,就是unicode。

文件处理

f=open(r'aaaa.py',encoding='utf-8') #x=1
#
调用aaa.py这个文件,因为open是操作系统调用,操作系统是GBK的所以结尾要规定为utf-8,前面的r的意思是假如这个文件的地址是绝对路径的话\没有任何意义。
#
print('+++++>1',f.read())#read是把文件内的内容一次读完。
#
print(type(data))
#
print('+++++>2',f.read())#一次读完,光标移动到后面,再打印就没得打印了
#
print('+++++>3',f.read())#这次也是打印为空
f.close()#关闭系统调用,不然会占用比较长的时间
print(f)
f.read()
# del f

 

# open:
#
1 会向操作系统发起系统调用,操作会打开一个文件
#
2 在python程序中会产生一个值指向操作系统打开的那个文件,我们可以把该值赋值一个变量
#

#
回收资源
#
1 f.close():一定要做,关闭操作系统打开的文件,即回收操作系统的资源
#
2 del f:没必要做,因为在python程序运行完毕后,会自动清理与该程序有关的所有内存空间

# 文本文件:只读模式,文件不存在即报错
f=open(r'aaaa.py','r',encoding='utf-8')
print(f.read())
print(f.readline(),end='')
print(f.readlines())
print(f.readable())
print(f.writable()) #False
f.close()

# 文本文件:只写模式,文件不存在则创建空文件,文件存在则清空
f=open('new.txt','w',encoding='utf-8')
f.write(
'1111111\n')
f.writelines([
'22222\n','3333\n','444444\n'])
# print(f.writable())
f.close()

# 文本文件:只追加写模式,文件不存在则创建,文件存在
f=open('new_2','a',encoding='utf-8')
print(f.readable())
print(f.writable())

f.write(
'33333\n')
f.write(
'44444\n')
f.writelines([
'5555\n','6666\n'])

f.close()


# rb
f=open('aaaa.py','rb')
print(f.read().decode('utf-8'))
#文件的复制的过程
f=open('1.jpg','rb')
data
=f.read()

# wb
f=open('2.jpg','wb')
f.write(data)
#
f=open('new_3.txt','wb')
f.write(
'aaaaa\n'.encode('utf-8'))

# ab
f=open('new_3.txt','ab')
f.write(
'aaaaa\n'.encode('utf-8'))
#上下文管理(可以省略f.close执行完自动清理这部分程序的内存)
with open('aaaa.py','r',encoding='utf-8') as read_f,\
open(
'aaaa_new.py','w',encoding='utf-8') as write_f:
data
=read_f.read()
write_f.write(data)


#循环取文件每一行内容
for line in f: #推荐使用
print(line,end='')

with open(
'a.txt','r',encoding='utf-8') as f:
while True:
line
=f.readline()
if not line:break
print(line,end='')

lines
=f.readlines() #只适用于小文件
print(lines)

data
=f.read()
print(type(data))