python文件

2019-07-22  本文已影响0人  枫頔

IO在计算机编程中指的是输入和输出。IO编程中,Stream(流)是一个很重要的概念。IO有同步IO和异步IO两种,同步和异步的区别就在于是否等待IO执行的结果。读写文件是常见的IO操作。

1. 文件

1.1 打开文件

open():打开文件,返回一个stream(流对象)

使用方法:open(file, mode='r', buffering=None, encoding=None, errors=None...............)

1.2 关闭文件
file = open("test.txt")
# 操作
file.close()  # 关闭文件
try:
  file = open("test.txt")
    # 操作
finally:
  file.close()
with open("test.txt") as f:
  # 操作
1.3 读取文件
# 读取文件
# read():读取所有并返回,一般用于文件较小时读取
with open("python.txt", "r") as file:
    content = file.read()
    print(content)
# read(size):文本模式下读取指定字符数返回;二进制模式下表示读取指定字节返回(utf8编码,英文1个字节,汉字3个字节)
with open("python.txt", "r") as file:
    content = file.read(20)
    print(content)
    
with open("python.txt", "rb") as file:
    content = file.read(20)
    print(content)
    
# readline():读取一行并返回
with open("python.txt", "r") as file:
    line = file.readline()
    print(line)
    
# readlines():读取所有行包括换行符并以列表形式返回
with open("python.txt", "r") as file:
    line_list = file.readlines()
    print(line_list)
    
1.4 写入文件
# 写入文件:以写入模式(w,a,x,t,b)打开,使用write()方法进行写入,返回添加的字符数(二进制模式返回添加的字节数)
with open("python.txt", "a") as file:
    add_num = file.write("这是我自己添加的一行!!!")
    print(add_num)
    
with open("python.txt", "ab") as file:
    add_num = file.write("这是我自己添加的一行!!!".encode("utf-8"))
    print(add_num)
1.5 文件指针
with open("python.txt", "r") as file:
    print(file.tell())  # 起始指针位置
    file.read(20)  # 读取20个字符
    print(file.tell())  # 读取指定字符后指针位置(字节数)
    file.seek(0)  # 移动指针到指定位置(此处为文件开头)
    print(file.tell())  # 手动移动指针后指针位置
1.6 文件迭代

2. StringIO和BytesIO

2.1 StringIO:在内存中读写str
from io import StringIO

file = StringIO("hello\n world \n name.")  # 创建StringIO对象并使用字符串进行初始化
print(file.read())  # 读取StringIO对象的内容

file.write("hello python")
print(file.getvalue())  # 获取StringIO对象写入后的内容
2.2 BytesIO:读写二进制数据
from io import BytesIO

file = BytesIO("你好".encode("utf-8"))  # 创建并初始化BytesIO对象
print(file.read().decode("utf-8"))  # 读取内容并解码

file.write("中国".encode("utf-8"))  # 向BytesIO对象写入内容(二进制,需要编码)
print(file.getvalue().decode("utf-8"))  # 获取写入后的内容并解码

3. 序列化与反序列化

把对象的状态信息变成可存储或传输的过程称之为序列化(二进制格式)。序列化之后,就可以把序列化后的内容写入磁盘,或者通过网络传输到别的机器上。python使用pickle模块实现数据的简单序列化和反序列化。

3.1 序列化
# 序列化与反序列化
import pickle

# 序列化:将对象状态信息变为可存储或者可传输的过程称为序列化(变为二进制格式)
mydict = {"name":"fengdi", "age":22, "language":"python"}
mydict_pickle = pickle.dumps(mydict)  # 序列化为二进制模式,此时可写入文件或进行传输
print(mydict_pickle)

with open("pickle.txt", "wb") as file:  # 以二进制写入模式打开并写入
    file.write(mydict_pickle)
    
with open("pickle.txt", "rb") as file:
    content = file.read()
    print(content)

mylist = ["python", "java", 10, 20]  # 直接序列化对象并写入文件
with open("pickle.txt", "wb") as file:
    pickle.dump(mylist, file)
    
with open("pickle.txt", "rb") as file:
    content = file.read()
    print(content)
3.2 反序列化
# 反序列化
with open("pickle.txt", "rb") as file:
    content = file.read()  # 二进制模式
    print(pickle.loads(content)) # 从二进制模式反序列化(需要先以二进制模式将内容读取出来)
    
with open("pickle.txt", "rb") as file:  # 直接从文件中反序列化为对象
    content = pickle.load(file)
    print(content)

4. python和json格式转换

python类型 json类型
dict { }
list [ ]
str " "
int float 1234.56
True False true false
None null
上一篇下一篇

猜你喜欢

热点阅读