1. bytes类型只能与str相互转换,其他数据类型如果想转换为bytes类型首先要转换成str类型
2. bytes类型与str类型的区别:
str类型:
在内存中是以Unicode编码
用于存储少量数据
bytes类型:
在内存中以非Unicode编码
用于数据的网络传输和存储
1. 文件句柄 = open(‘文件路径/文件‘, encoding=‘编码方式‘,mode=‘文件操作的模式‘)
2. 操作文件的三大步骤
a. 打开文件
b. 对文件进行操作
c. 关闭文件
举例:
f = open(‘readfile‘, encoding=‘utf-8‘, mode=‘r‘)
print(f.read())
f.close()
3. 文件操作说明
a. 打开文件使用open()内置函数,open底层调用的是操作系统的接口
b. 文件句柄,对文件的任何操作都需要通过文件句柄
c. encoding可以不指定,默认是操作系统默认编码:Windows:gbk,Linux:utf-8,mac:utf-8
d.关闭文件close()
文件操作的两种主流错误:
1. UnicodeDecodeError:文件存储编码与打开的编码不一致
2. 路径错误:路径分隔符产生的问题:
解决方式:在路径前加r
举例:f1 = open(r‘/Users/suncong/Desktop/文件夹/联系方式.txt‘, encoding=‘utf-8‘, mode=‘r‘)
读操作的四个模式:r,rb,r+,r+b
模式:r:用于处理文本文件
功能:
1. read():将文件内容全部读取出来
文件句柄.read()
2. read(n):按照字符读取文件,n指定读取字符的个数
文件句柄.read(n)
3. readline():按照行读取,每次读取一行
4. readlines():将每一行的数据读取出来并添加在一个列表里,一行数据是一个元素。
5. 循环读取:使用for循环
for var in f:
print(var)
每次读取文件中的一行数据。
模式:rb:用于读取非文本文件,功能同r模式一致,并且使用rb不要指定打开文件的编码,它会自动识别
举例:
f = open(‘一人之下.jpg‘, mode=‘rb‘)
print(f.read())
f.close()
写操作的四种模式:w,wb,w+,w+b
模式:w,写操作如果指定写入的文件不存在会创建文件,如果存在会先清空原文件内容再写入。
**注意:这里的清空是指文件被关闭之后,再次打开文件进行写操作,原来的内容会被清空,如果文件没有被关闭,进行多次写入时是不会被清空的。
功能:
write():写入内容
模式:wb:作用同rb,用于写入非文本文件。
追加的四种模式:a,ab,a+,a+b
模式:a:没有文件创建文件,追加内容,文件存在,在尾部追加内容
功能:
write()
模式:r+:读写功能,如果文件不存在,不会创建文件,会报错,正确的顺序应该是先读后写,否则,写入的数据会覆盖掉原数据,并且当字节位数有问题时,写入会报错。
1. tell():返回光标所在位置,单位是字节
2. seek(n):移动光标所在位置,n是字节数
3. flush():强制刷新,将数据从内存中刷新到硬盘中
with open(‘文件名‘,encoding=‘utf-8‘,mode=‘模式‘) as 文件句柄:[,oepn(....) as 文件句柄2.....:]
相应操作
--------------------------------------------
举例:
复制一张图片:
with open(‘一人之下.jpg‘, mode=‘rb‘) as f1, open(‘一人之下new.jpg‘, mode=‘wb‘) as f2:
content = f1.read()
f2.write(content)
--------------------------------------------
优点:
1. 不用手动关闭文件句柄,他会在一定时间内自动关闭
2. 一行可以操作多个文件
缺点:待续
文件的改的操作五大步:
1. 以读的模式打开原文件
2. 以写的模式创建一个新文件
3. 将原文件的内容读出来修改成你想要的内容,然后写入新文件
4. 将原文件删除 import os:remove()
5. 将新文件重命名成新文件 rename()
##lower版修改文件的操作:
文件内容:
alex是老男孩python发起人,创建人。
alex其实是人妖。
谁说alex是sb?
你们真逗,alex再牛逼,也掩饰不住资深屌丝的气质。
代码:
import os
with open(‘readfile‘, encoding=‘utf-8‘, mode=‘r‘) as f1, open(‘readfile.bak‘, encoding=‘utf-8‘, mode=‘w‘) as f2:
old_line = f1.read()
new_line = old_line.replace(‘alex‘, ‘SB‘)
f2.write(new_line)
os.remove(‘readfile‘)
os.rename(‘readfile.bak‘, ‘readfile‘)
进阶版:
import os #调用os模块
with open(‘readfile‘, encoding=‘utf-8‘, mode=‘r‘) as f1, open(‘readfile.bak‘, encoding=‘utf-8‘, mode=‘w‘) as f2:
for line in f1:
new_line = line.replace(‘SB‘, ‘alex‘)
f2.write(new_line)
os.remove(‘readfile‘) #将原readfile文件删除
os.rename(‘readfile.bak‘, ‘readfile‘)#将新readfile.bak文件改名问readfile
原文:https://www.cnblogs.com/vvbear/p/12843554.html