文件读写
读文件
opentype表示打开类型,当打开非utf-8编码的文本时要用encoding之处编码方式,当文本打开的时候因为一些特殊字符导致错误时,用errors=’ignore‘来忽略这些错误
f =open('filenlocation','opentype',encoding='gbk',errors='ignore')
如果文件不存在,open()函数就会抛出一个IOError错误,
f.read() #读取文件的所有内容
最后关闭文件
f.close()
简单方式,操作完自动关闭文件
with open('filelocation') as f:
pass
写文件:
在打开文件的基础上,用f.write(content)写入文件。用什么方式写用什么编码写都要在open文件的时候用参数表示好。
StringIO和BytesIO
StringIO
含义:在内存中读写str,要把strt写入StringIO,先创建一个StringIO,然后像写文件一样写入
from io import StringIO
f =StringIO()
f.write('hello')
f.write(' world')
print(f.getvalue())
output:
hello world
BytesIO
StringIO操作的只能是str,如果要操作二进制数据,就需要使用BytesIO。
BytesIO实现了在内存中读写bytes,我们创建一个BytesIO,然后写入一些bytes:
rom io import BytesIO
f = BytesIO()
f.write(content.encode(编码方式))
tips:
StringIO和BytesIO都可以用内容初始化
f = StringIO('this is a stringIO')
f =BytesIO(b'this is a BytesIO')
操作文件和目录
使用 os模块
获取系统信息: os.uname()
,Windows下不可用
查看环境变量: os.environ
获取某个环境变量的值 :os.environ.get('key')
创建删除文件夹:os.mkdir/os rmdir
拆分路径,分为目录和文件名:os.path.split()
os.path.split('/Users/michael/testdir/file.txt')
('/Users/michael/testdir', 'file.txt')
获得扩展名:os. path.splitext()
os.path.splitext('/path/to/file.txt')
('/path/to/file', '.txt')
列出所有文件:listdir()
括号内为’.‘表示当前路径
序列化与反序列化
定义:把变量从内存中变成可存储或传输的过程称之为序列化,在Python中叫pickling,反过来,把变量内容从序列化的对象重新读到内存里称之为反序列化,即unpickling。
import pickle
d = [1,2,3,4]
#序列化
pickle.dumps(d)
with open("D:/a.txt",'wb') as f:
写入文件
pickle.dump(d, f)
with open("D:/a.txt",'rb') as f:
#反序列化
d = pickle.load(f)
print(d)
json与python的转化
序列化用json.dumps(),返回序列化以后的内容
import json
d = dict(name ='bob',age =20,score =80)
print(json.dumps(d))
==> {"name": "bob", "age": 20, "score": 80}
反序列化用 json.loads( )
实例对象的序列化
通过dumps参数里的default参数,令它等于一个转化函数
转化函数写在外面:
import json
class student(object):
def __init__(self,name,age,sex):
self.name =name
self.age =age
self.sex =sex
def todict(s):
return {
'name':s.name,
'age' :s.age,
'sex' :s.sex
}
s =student('bob',16,'male')
print(json.dumps(s,default=todict))
output:
{"name": "bob", "age": 16, "sex": "male"}
转换函数写在里面:
import json
class student(object):
def __init__(self,name,age,sex):
self.name =name
self.age =age
self.sex =sex
def todict(self):
return {
'name':self.name,
'age' :self.age,
'sex' :self.sex
}
s =student('bob',16,'male')
print(json.dumps(s,default= lambda s: s.todict()))#注意这里有括号
不用自己写函数,使用class自带的函数
import json
class student(object):
def __init__(self,name,age,sex):
self.name =name
self.age =age
self.sex =sex
def todict(self):
return {
'name':self.name,
'age' :self.age,
'sex' :self.sex
}
s =student('bob',16,'male')
print(json.dumps(s,default= lambda obj: obj.__dic__))#注意这里方法没括号
json转实例对象:json.loads(d)
#定义一个转化函数
def jsontostudent(d):
return student(d['name'],d['age'],d['sex'])
#object_hook函数把json转dict
print(json.loads(json_str,object_hook=jsontostudent))
output
<__main__.student object at 0x000001C0D4588EF0>
网友评论