Python IO编程

  • IO在计算机中指Input/Output,也就是输入和输出
  • 同步和异步的区别就在于是否等待IO执行的结果。

文件读写

  • 要读写文件,使用python内置函数open()
>>> f = open('/Users/michael/test.txt', 'r')
>>> f.read()
'Hello, world!
>>> f.close()
# 由于文件不存在可能抛出IOError,所以我们用try...finally实现
try:
    f = open('/path/to/file', 'r')
    print(f.read())
finally:
    if f:
        f.close()

# 但是每次都这么写实在太繁琐,所以,Python引入了with语句来自动帮我们调用close()方法:
# 简写方式
with open('/path/to/file', 'r') as f:
    print(f.read())
# 写入文件
with open('/Users/michael/test.txt', 'w') as f:
    f.write('Hello, world!')
  • StringIO 和 BytesLO
>>> from io import StringIO
>>> f = StringIO()
>>> # f = StringIO('Hello!\nHi!\nGoodbye!')
>>> f.write('hello')
5
>>> f.write(' ')
1
>>> f.write('world!')
6
>>> print(f.getvalue())
hello world!

# getValue()方法用于获得写入后的str
  • BytesIO
  • StringIO操作的只是str,如果要操作二进制数据,使用BytesIO
>>> from io import BytesIO
>>> f = BytesIO()
>>> f.write('中文'.encode('utf-8'))
6
>>> print(f.getvalue())
b'\xe4\xb8\xad\xe6\x96\x87' #写入的不是str,而是UTF-8编码的bytes

操作文件和目录

>>> import os
>>> os.name # 操作系统类型
>>> os.uname() # 详细的系统信息
>>> os.environ 操作系统定义的环境变量
>>> os.environ.get('PATH')
>>> os.path.abspath('.')#查看当前的绝对路径
>>> os.path.join('/users/michael','testdir')#在user..目录下创建新目录
>>> os.mkdir('/user/michael/testdir')#创建一个目录
>>> os.rmdir('/user/michael/testdir')#删除一个目录
>>> os.path.split('/Users/michael/testdir/file.txt') #拆分路径
('/Users/michael/testdir', 'file.txt')
>>> os.path.splitext('/path/to/file.txt')#os.path.splitext()可以直接让你得到文件扩展名
# 对文件重命名:
>>> os.rename('test.txt', 'test.py')
# 删掉文件:
>>> os.remove('test.py')
('/path/to/file', '.txt')

序列化

>>> import pickle
>>> d = dict(name='Bob', age=20, score=88)
>>> pickle.dumps(d)
b'\x80\x03}q\x00(X\x03\x00\x00\x00ageq\x01K\x14X\x05\x00\x00\x00scoreq\x02KXX\x04\x00\x00\x00nameq\x03X\x03\x00\x00\x00Bobq\x04u.'
#pickle.dumps()方法把任意对象序列化成一个bytes,然后,就可以把这个bytes写入文件。或者用另一个方法pickle.dump()直接把对象序列化后写入一个file-like Object:
>>> f = open('dump.txt', 'wb')
>>> pickle.dump(d, f)
>>> f.close()
#当我们要把对象从磁盘读到内存时,可以先把内容读到一个bytes,然后用pickle.loads()方法反序列化出对象,也可以直接用pickle.load()方法从一个file-like Object中直接反序列化出对象。我们打开另一个Python命令行来反序列化刚才保存的对象:
>>> f = open('dump.txt', 'rb')
>>> d = pickle.load(f)
>>> f.close()
>>> d
{'age': 20, 'score': 88, 'name': 'Bob'}
  • json 不同编程语言之间传递对象
# 把Python对象变成一个JSON
>>> import json
>>> d = dict(name='Bob', age=20, score=88)
>>> json.dumps(d) # dumps()方法返回一个str,内容就是标准的JSON

#把JSON反序列化为Python对象
>>> json_str = '{"age": 20, "score": 88, "name": "Bob"}'
>>> json.loads(json_str)
{'age': 20, 'score': 88, 'name': 'Bob'}
'{"age": 20, "score": 88, "name": "Bob"}'

你可能感兴趣的:(Python IO编程)