PythonIO编程

文件读写

读文件

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>

猜你喜欢

转载自blog.csdn.net/dpengwang/article/details/81413390