2019-05-14
IO编程
文件读写
IO编程中,Stream(流)是一个很重要的概念,可以把流想象成一个水管,数据就是水管里的水,但是只能单向流动。Input Stream就是数据从外面(磁盘、网络)流进内存,Output Stream就是数据从内存流到外面去。
file=open('文件路径','r',encoding='gbk') #读取二进制文件用‘rb’,读取其他方式编码的文件用encoding
file.read() #读取文件全部内容
file.read(size) #每次最多读取size个字节的内容
file.readline() #可以每次读取一行内容
file.readlines() #一次性读取所有内容并按行返回list。
for line in f.readlines():
print(line.strip()) #把每行的空格去掉
file2=open('','r',encoding='',errors='ignore')
file2.write('Hello,world!')
file2.close()
StringIO和BytesIO
在内存中读取数据
from io import StringIO
f=StringIO()
f.write('Helllo')
f.write(' ')
f.write('world')
print(f.getvalue()) #getvalue()方法用于获得写入后的str
f=StringIO('Hello!\nHi!\nGoodbye!')
while True:
s=f.readline()
if s==''
break
print(s.strip())
from io import BytesIO
f=BytesIO()
f.write('中文'.encode('utf-8'))
print(f.getvalue())
<font color='maroon'>StringIO和BytesIO是在内存中操作str和bytes的方法,使得和读写文件具有一致的接口。</font>
操作文件和目录
Python的os模块封装了操作系统的目录和文件操作,要注意这些函数有的在os模块中,有的在os.path模块中。
import os
os.name #操作系统类型
os.uname() #获取详细的系统信息
os.environ #在操作系统中定义的环境变量,全部保存在os.environ这个变量中,他返回一个dict
os.environ.get('PATH')
os.path.abspath('.') #查看当前目录的绝对路径
os.path.join('','') #在某个目录下创建一个新目录,首先把新目录的完整路径表示出来
os.mkdir('') #创建一个目录
os.rmdir('') #删除一个目录
os.path.split('/Users/michael/testdir/file.txt') #把一个路径拆分为两部分
('/Users/michael/testdir', 'file.txt')
os.path.splittext('/path/to/file.txt')
('/path/to/file', '.txt')
JSON!!!!
JSON表示出来就是一个字符串,可以被所有语言读取,也可以方便地存储到磁盘或者通过网络传输。
- JSON类型 python类型
- {} dict
- [] list
- "string" str
- 1234.56 int或float
- true/false True/Flase
- null None
JSON格式和Python格式互相转换</br>
1.将python转化为JSON格式
import json
d=dict{name='Bob',gender='man',score=59,age=17}
json.dumps(d)
'{"age": 20, "score": 88, "name": "Bob"}'
dumps()方法返回一个str,内容是标准的JSON</br>
dump()可以直接把JSON写入一个file-like Object
2.将JSON转化为Python格式
json_str='{"age": 20, "score": 88, "name": "Bob"}'
json.loads(json_str)
{"age": 20, "score": 88, "name": "Bob"}
要把JSON反序列化为Python对象,用loads()或者对应的load()方法,前者把JSON的字符串反序列化,后者从file-like Object中读取字符串并反序列化
3.json进阶
import json
class Student(object):
def _init_(self,name,age,score)
self.name=name
self.age=age
self.score=score
def student2dict(self):
return {
'name':self.name
'age':self.age
'score':self.score
}
def dict2student(d):
return Student(d['name',d['age'],d['score']])
s=Student('Bob',17,59)
print(json.dumps(s.student2dict()))
json_str='{"age": 20, "score": 88, "name": "Bob"}'
print(json.loads(json_str,object_hook=dict2student))