IO编程
文件读写
读文件:
f=open('/Users/michael/test.txt','r')打开
f.read()读取
如果不能确定文件大小,反复调用read(size)比较保险;如果是配置文件,调用readlines()最方便:
with open('d:/test11.txt','r') as f:
print(f.readlines())
像open()函数返回的这种有个read()方法的对象,在Python中统称为file-like Object。
StringIO就是在内存中创建的file-like Object,常用作临时缓冲。
二进制文件
f=open('/Users/michael/test.txt','rb')用'rb'模式打开文件为二进制文件读取
字符编码
f=open('/Users/michael/test.txt','r',encoding='gbk',errors='ignore')读取GBK编码的文件,忽略错误信息
写文件:
写文件和读文件是一样的,唯一区别是调用open()函数时,传入标识符'w'或者'wb'表示写文本文件或写二进制文件:
f=open('d:/test11.txt','w')
f.write('Hello,world!')
f.close()
只有调用close()方法时,操作系统才保证把没有写入的数据全部写入磁盘。忘记调用close()的后果是数据可能只写了一部分到磁盘,剩下的丢失了
with open('d:/test11.txt','w') as f:
f.write('Hello,world!')
https://docs.python.org/3/library/functions.html#open
StringIO和BytesIO
StringIO顾名思义就是在内存中读写str。
>>> from io import StringIO
>>> f = StringIO()
>>> f.write('hello')
getvalue()方法用于获得写入后的str。
print(f.getvalue())
要读取StringIO,可以用一个str初始化StringIO,然后,像读文件一样读取:
>>> from io import StringIO
>>> f = StringIO('Hello!\nHi!\nGoodbye!')
>>> while True:
... s = f.readline()
... if s == '':
... break
... print(s.strip())
BytesIO
操作二进制数据,就需要使用BytesIO
>>> from io import BytesIO
>>> f = BytesIO()
>>> f.write('中文'.encode('utf-8'))
操作文件和目录
Python程序中执行这些目录和文件的操作怎么办?其实操作系统提供的命令只是简单地调用了操作系统提供的接口函数,Python内置的os模块也可以直接调用操作系统提供的接口函数。
import os
os.name
操作文件和目录的函数一部分放在os模块中,一部分放在os.path模块中
序列化
变量从内存中变成可存储或传输的过程称之为序列化pickling,反过来,把变量内容从序列化的对象重新读到内存里称之为反序列化,即unpickling。
import pickle
d = dict(name='Bob', age=20, score=88)
pickle.dumps(d)
当我们要把对象从磁盘读到内存时,可以先把内容读到一个bytes,然后用pickle.loads()方法反序列化出对象,也可以直接用pickle.load()方法从一个file-like Object中直接反序列化出对象
文件读写
读文件:
f=open('/Users/michael/test.txt','r')打开
f.read()读取
如果不能确定文件大小,反复调用read(size)比较保险;如果是配置文件,调用readlines()最方便:
with open('d:/test11.txt','r') as f:
print(f.readlines())
像open()函数返回的这种有个read()方法的对象,在Python中统称为file-like Object。
StringIO就是在内存中创建的file-like Object,常用作临时缓冲。
二进制文件
f=open('/Users/michael/test.txt','rb')用'rb'模式打开文件为二进制文件读取
字符编码
f=open('/Users/michael/test.txt','r',encoding='gbk',errors='ignore')读取GBK编码的文件,忽略错误信息
写文件:
写文件和读文件是一样的,唯一区别是调用open()函数时,传入标识符'w'或者'wb'表示写文本文件或写二进制文件:
f=open('d:/test11.txt','w')
f.write('Hello,world!')
f.close()
只有调用close()方法时,操作系统才保证把没有写入的数据全部写入磁盘。忘记调用close()的后果是数据可能只写了一部分到磁盘,剩下的丢失了
with open('d:/test11.txt','w') as f:
f.write('Hello,world!')
https://docs.python.org/3/library/functions.html#open
StringIO和BytesIO
StringIO顾名思义就是在内存中读写str。
>>> from io import StringIO
>>> f = StringIO()
>>> f.write('hello')
getvalue()方法用于获得写入后的str。
print(f.getvalue())
要读取StringIO,可以用一个str初始化StringIO,然后,像读文件一样读取:
>>> from io import StringIO
>>> f = StringIO('Hello!\nHi!\nGoodbye!')
>>> while True:
... s = f.readline()
... if s == '':
... break
... print(s.strip())
BytesIO
操作二进制数据,就需要使用BytesIO
>>> from io import BytesIO
>>> f = BytesIO()
>>> f.write('中文'.encode('utf-8'))
操作文件和目录
Python程序中执行这些目录和文件的操作怎么办?其实操作系统提供的命令只是简单地调用了操作系统提供的接口函数,Python内置的os模块也可以直接调用操作系统提供的接口函数。
import os
os.name
操作文件和目录的函数一部分放在os模块中,一部分放在os.path模块中
序列化
变量从内存中变成可存储或传输的过程称之为序列化pickling,反过来,把变量内容从序列化的对象重新读到内存里称之为反序列化,即unpickling。
import pickle
d = dict(name='Bob', age=20, score=88)
pickle.dumps(d)
当我们要把对象从磁盘读到内存时,可以先把内容读到一个bytes,然后用pickle.loads()方法反序列化出对象,也可以直接用pickle.load()方法从一个file-like Object中直接反序列化出对象