Python3的读写文件,os模块,序列化

一。Python语言读写文件的函数

open(file, mode='r', buffering=-1, encoding=None, errors=None, newline=None, closefd=True, opener=None)

mode的几个参数:

r 只能读
r+ 可读可写 从顶部开始写,覆盖之前位置的内容 不创建不存在文件
rb 读取二进制文件 不创建不存在文件
w 写 不创建不存在文件  文件存在则,覆盖之前文件
w+ 可读可写 创建不存在文件 文件存在则,覆盖之前文件
wb 写入二进制文件 创建不存在文件 文件存在则,覆盖之前文件
a 从底部开始添加内容 创建不存在文件
a+ 可读可写 从文件顶部读取,从文件底部写入 创建不存在文件

ps:w+ a+ 必须在写入数据后,使用seek(0)将光标移动到开头,否则无法读取全部数据

下面来具体的代码感受下:

f=open('text2.txt',mode='w+',encoding='UTF-8')
f.write('创建了text2文件') #文件不存在,创建
f.seek(0) #定位光标到文件开头
print(f.read()) #读取全部内容
f.close()

f=open('text2.txt',mode='w+',encoding='UTF-8')
f.write('更改') #文件存在,覆盖文件
print(f.read())
f.close()

f=open('text.txt',mode='r',encoding='UTF-8')
print(f.read()) #读取文件
f.close()

f=open('text.txt',mode='r+',encoding='UTF-8')
f.write('青岛') #文件存在,覆盖之前位置的内容
print(f.read()) #读取文件
f.close()

f=open('text.txt',mode='a',encoding='UTF-8')
f.write('\n谢谢观赏')#底部添加
f.close()

f=open('text.txt',mode='a+',encoding='UTF-8')
f.write('\n2018年儿童节')#底部添加
print(f.read()) #从顶部读取
f.close()

file的方法:

read(size) 有参数则为读取size个字节,无参数则读取所有内容

readline(size) 读取一行

tell() 返回当前标记位置,以文件开头为原点

seek(offset[,whence])

  • offset 偏移量
  • whence 光标移动基点 0代表文件开头 1代表当前标记位置 2代表文件末尾


writelines(seq) 迭代字符串序列添加

具体代码:

f=open('text.txt',mode='a+',encoding='UTF-8')
str=['啥家庭啊\n','开开心心']
f.writelines(str)
f.seek(0)
print(f.readline().rstrip()) #读取一行
print(f.tell())
f.close()

二。操作文件

Python os 模块提供了非常丰富的方法用来处理文件和目录

mkdir() 创建目录

rmdir() 移除目录

remove() 移除文件

rename() 修改文件或目录名

listdir()返回当前文件夹所有文件的名字组成的列表

getcwd() 返回当前所在路径

话不多说。代码如下:

import os
os.mkdir('test') #创建目录
os.rename('aaa.txt','demo1.txt') #修改文件或目录名
os.remove('ccc.txt') #移除文件
print(os.getcwd()) #返回当前路径
print(os.listdir()) #返回当前位置所有文件的名字,组装为列表
os.rmdir('demo') #删除目录

三。Python序列化和反序列化

在Python中,序列化和反序列化是通过“Pickle”库实现的。

Pickle有两个主要的方法。第一个是将对象放到文件中的转储。第二种方法是从文件对象加载对象的加载。

Pickle必须在二进制模式下使用,否则会造成文件数据的破坏

pickle.dump(data,file) 将数据data序列化到file文件流中

pickle.load(file) 读取流对象缓冲区数据,并实例化为新的数据对象返回

代码实现:

import pickle
data={'a':[1,2,3],
    'b':'bb','c':None}
#序列化
with open('ccc.txt','wb') as f: #使用with 可以让file自动关闭
    pickle.dump(data, f) #将字典序列化保存到ccc.txt中
# 反序列化
with open('ccc.txt','rb') as f:
    print(pickle.load(f))
pickle.dump()和pickle.load()循环形成了与原始数据结构相同的新数据结构。



你可能感兴趣的:(Note)