文件操作初识
编码的进阶:
英文:
str:
在内存中的编码:unicode
表现形式:'taibai'
bytes:
在内存中的编码: 非unicode
表现形式: b'taibai'
中文:
以什么编码就以什么解码!!!
str--->gbk bytes
s1 = 'a太白' b1 = s1.encode('gbk') print(b1) #b'a\xcc\xab\xb0\xd7' b2 = b1.decode('gbk') print(b2) #a太白
utf-8 bytes ---> str unicode
s2 = b'a\xe5\xa4\xaa\xe7\x99\xbd' b3 = s2.decode('utf-8') print(b3) #先将s2转换成unicode
s = b3.encode('gbk')
print(s) #再将b3转换成gbk
文件操作初识
f 变量: f,f1,file,fh,file_handler........ 文件句柄
具体操作:
读 写 读写 写读 等等
文件的读:
四种模式:
r r+ rb r+b
每种模式下又有5种读文件
1. read() 全部读写
f1 = open('练习',encoding= 'utf-8') content = f1.read() print(content,type(content)) f1.close()
2.read(n)
f1 = open ('练习',encoding = 'utf-8') print(f1,read(3)) f1.close
3.readline()
f1 = open ('练习',encoding = 'utf-8') print(f1.readline().strip()) print(f1.readline().strip()) f1.close()
4.readlines()
f1 = open ('练习', encoding = 'utf-8') print(f1.readlines()) f1.close()
5.循环读取 ***********最好的*************
f1 = open ('练习', encoding = 'utf-8') for i line in f1: print(line) f1.close
文件的写
w w+ wb w+b
w:
没有文件 创建文件 写入内容
f = open ('练习',encoding = 'utf-8',mode = 'w') f.write('你想些什么就写什么') f.close()
文件的追加
a:
f = open ('练习',encoding = 'utf-8',mode = 'a') f.write('这是追加的内容') f.close()
运用最多的还是 r r+ 其次是 w 和 a
网络: rb wb
其他操作方法
seek tell
f1 = open ('练习',encoding = 'utf-8') f1.seek(9) #按照字节调整光标位置 print(f1.read()) f1.close() f1 = open ('练习2',encoding = 'utf-8') print(f1.tell()) #获取光标的位置 print(f1.read()) f1.close()
总结: read flush seek tell readable writeable
文件的第二种打开方式:
with open('练习',encoding = 'utf-8') as f1: print(f.read())
with open('练习',encoding = 'utf-8') as f,\ open('新练习',encoding = 'utf-8',mode = 'w') as f2: print(f.read()) f2.write('给新练习增加新内容') f2.write('又给它增加一点新的内容')
文件的改
一共五个步骤:
1.以读的模式打开原文件
2.以写的模式创建一个新文件
import os with open ('练习',encoding = 'utf -8') as f1,\ open('增加的新文件',encoding = 'urf-8',mode = 'w') as f2:
3.将原文件内容读出来,按照你的要求改成新内容,写入新文件
for old_line in f1: new_line = old_line.replace('你的','我的') f2.write(new_line)
4.删除原文件
os.remove('练习')
5.将新文件重命名成原文件
os.rename('增加的新文件','练习')
深浅copy:
浅copy:
无论是同一个代码块还是不同代码块下:
只copy原类型的外壳,外壳里面的元素共用(元素为可变数据类型的话,会同步改变;如果是改不可变数据,会创建新数据赋值给被改变数据的原内存地址 即 -->谁改变,谁显示)
深copy:
无论是同一个代码块还是不同代码块下:
不仅copy原类型的外壳,而且外壳里面的可变数据类型也创建一个新的地址,且改不可变数据会创建新数据赋值给被改变数据的原内存地址 即 -->谁改变,谁显示