文件读写
try:
f = open('/path/to/file', 'r')
print(f.read())
finally:
if f:
f.close()
简化为下面的语法糖
with open(r"C:\test\test.txt", 'r') as f:
for line in f.readlines():
print(line.strip()) # 把末尾的'\n'删掉
这个文件中,每行的末尾都有一个看不见的换行符,而print 语句也会加上一个换行符,因此每行末尾都有两个换行符:一个来自文件,另一个来自print 语句。
调用
read()
会一次性读取文件的全部内容,但如果文件有10G,内存就爆了。所以,要保险起见,可以反复调用read(size)
方法,每次最多读取size个字节的内容。另外,调用readline()
可以每次读取一行内容,调用readlines()
一次读取所有内容并按行返回list
如果文件很小,
read()
一次性读取最方便;如果不能确定文件大小,反复调用read(size)
比较保险;如果是配置文件,调用readlines()
最方便:
要读取二进制文件,比如图片、视频等等,需要用'rb'
模式打开文件
非UTF-8编码的文本文件,需要给
open()
函数传入encoding
参数遇到有些编码不规范的文件,你可能会遇到
UnicodeDecodeError
,因为在文本文件中可能夹杂了一些非法编码的字符。遇到这种情况,open()
函数还接收一个errors
参数,表示如果遇到编码错误后如何处理。最简单的方式是直接忽略
f=open(r"D:\c盘来的\共享文件\bz\col.jpg","rb")
g=open("pic.jpg","wb")
while(1):
a = f.read(8)
if(not a):
break
g.write(a)
f.close()
g.close()
StringIO
from io import StringIO
f = StringIO()
f.write('hello')
print(f.getvalue())
f.close()
读取StringIO,可以用一个str初始化StringIO,然后,像读文件一样读取
from io import StringIO
f = StringIO('Hello!\nGoodbye!')
s = f.readlines()
for i in s:
print(i.strip())
f.close()
BytesIO
StringIO操作的只能是str,如果要操作二进制数据,就需要使用BytesIO
from io import BytesIO
f = BytesIO()
f.write('中文'.encode('utf-8'))
print(f.getvalue().decode('utf-8'))
用一个bytes初始化BytesIO,然后可以像读文件一样读取
from io import BytesIO
f = BytesIO(b'\xe4\xb8\xad\xe6\x96\x87')
print(f.read())
File.seek(1) File.seek(2) 0指针回到文件开头 1当前位置 2文件结尾
import io
# 写入二进制数据到 BytesIO 对象中
data = b"Hello, World!"
bio = io.BytesIO()
bio.write(data)
# 从 BytesIO 对象中读取二进制数据
bio.seek(0)
read_data = bio.read()
print(read_data)
在 Python 中,以
b
开头的字符串表示的是二进制字符串(bytes)。这种字符串是由字节组成的,每个字节都有一个对应的整数值,范围在 0 到 255 之间。二进制字符串与普通字符串不同,因为普通字符串是由 Unicode 字符组成的,每个字符都对应一个 Unicode 码点。将二进制字符串转换成普通字符串,可以使用字符串的
decode()
方法。decode() 方法将一个字节串(bytes)转换成一个字符串(str),需要指定一个编码方式。在不知道编码方式的情况下,可以使用默认编码方式(通常为 UTF-8)
read_data = bio.read().decode()
文件和目录
import os
print(os.path.abspath('.'))
a=os.path.join('D:\c盘来的\py\pycharm', 'mypro\coleak')
print(a)
# os.mkdir(a)
os.rmdir(a)
os.path.split()
函数可以把一个路径拆分为两部分,后一部分总是最后级别的目录或文件名
os.path.splitext()
可以直接让你得到文件扩展名
输出所由目录文章来源:https://www.toymoban.com/news/detail-488294.html
import os
for x in os.listdir('.'):
if os.path.isdir(x):
print(x)
序列化
import pickle
d = dict(name='coleak', age=20, score=88)
e={"name":"coleak","age":19}
print(type(e))
print(pickle.dumps(d))
e=pickle.dumps(e)
print(pickle.loads(e))
存储到文件文章来源地址https://www.toymoban.com/news/detail-488294.html
import pickle
d = dict(name='Bob', age=20, score=88)
pickle.dumps(d)
f = open('a.txt', 'wb')
pickle.dump(d, f)
f.close()
f = open('a.txt', 'rb')
d = pickle.load(f)
print(d)
f.close()
JSON
import json
d = dict(name='Bob', age=20, score=88)
print(json.dumps(d))
f = open('a.txt', 'rb')
d = pickle.load(f)
print(d)
f.close()
到了这里,关于【python】IO编程的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!