廖雪峰python学习笔记【15】IO编程

一、IO编程:

    1. 本章介绍的IO都是同步IO。

二、文件读写

1. 读文件

    1.1 f = open('try.py', 'r') # 读文件之前,需要首先打开文件。指定文件名和读方式,返回文件对象。

    1.2 f.read() # 一次性读取文件的全部内容。返回的是str对象。

    1.3 f.read(size) # 读取指定字节的文件内容。返回的是str对象。

    1.4 f.readline() # 读取一行内容。返回的是str对象。

    1.5 f.readlines() # 按行读取所有内容。返回的是list对象。

    1.6 f.close():

        1.6.1 读取文件完成后,务必关闭文件对象。

        1.6.2 可以在try...finaly...的finaly语句体中关闭。

        1.6.3 可以通过with语句打开文件:with open('/path/to/file', 'r') as f: 在with语句的语句体中执行对文件的操作。该语句体执行完毕后,会自动关闭文件对象。

2. file-like Object:

    2.1 有read方法的对象统称为file-like Object。

    2.2 包括文件流,内存字节流,网络流, 自定义流等。

    2.3 StringIO就是在内存中创建的file-link Object,常用作临时缓冲。

3. 二进制文件:读取文本文件时,使用'r'方式打开文件;读物二进制文件如图片、视频等时,用'rb'方法打开文件。

4. 字符编码:

    4.1 fd = open('admin.xml', 'r', encoding='gbk', errors='ignore')说明如下:

    4.2 默认使用utf-8编码方式打开文件;

    4.3 通过默认参数encoding可以使用指定的编码方式打开文件;

    4.4 当打开文件时,遇到个别非法字符时,可以指定默认参数errors指定该种情况的处理方式;

5. 写入文件:

    5.1 'w': 写入文本文件;原文件内容被删除。

    5.2 'wb':写入二进制文件;

    5.3 'a':追加文本内容到文件;


三、StringIO:只能操作str。

1. 示例一

from io import StringIO # 导入StringIO 
fd = StringIO() # 创建StringIO对象 fd.write('write something') # 通过write方法向StringIO写入str。 
content = fd.getvalue() # 获取写入StringIO对象中的内容。

2. 示例二:

from io import StringIO # 导入StringIO 
fd = StringIO('Hello\nlfc\nni hao') # 使用str初始化StringIO后,可以向操作文件对象一样读取StringIO。 
content = fd.readlines()

四、BytesIO:只能操作二进制数据

    1. 操作方式与StringIO类似;

五、操作文件和目录

1. 导入os模块后,os.name可以查看操作系统的类型。

    1.1 'posix':Linux、Unix或Mac OS X

    1.2 'nt':Windows系统

2. os模块的某些函数和操作系统相关。比如os.uname()函数可以查看系统的详细信息,但只能在linux类系统中使用。

3. 环境变量

    3.1 os.environ变量中保存有系统的环境变量。

    3.2 os.environ.get('PATH') # 查看系统的环境变量,区分大小写。

4. 操作文件和目录:

    4.1 可以使用os、os.path和shutil(比如提供了复制文件的函数copyfile())模块。

    4.2 os.path.abspath('./os') # 查看绝对路径。

    4.3 os.path.join('dir1', 'dir2') # 用于将两个路径合并。

    4.4 os.path.split('dir') # 用于将路径拆分成含有两个元素的tuple,后一个元素是dir路径最下层的子目录或文件。

        4.4.1 由于Windows和Linux下路径的连字符分别是'\'和'/'。所以最好不直接拼接字符串。

    4.5 os.path.splitext('dir') # 将dir查分成含有两个元素的tuple,后一个元素为文件的扩展名。

    4.6 os.mkdir('dir') # 创建目录

    4.7 os.rmdir('dir') # 删除目录

    4.8 shutil.copyfile('srcfile', 'destfile') # 拷贝文件内容

    4.9 [ subdir for subdir in os.listdir(''.') if os.path.isdir(subdir) ] #列出当前目录的子目录。

    4.10 [ pyfile for pyfile in os.listdir('.') if os.path.splitext(pyfile)[1] == '.py' ] # 列出当前目录下所有扩展名为.py的文件

    4.11 os.path.isfile('dir') 或 os.path.isdir('dir') # 判断dir是文件或目录,dir必须是相对路径或决定路径,不能仅仅是一个字符创。


六、序列化

1. 把变量从内存中变成可存储或传输的过程称为序列化。

2. pickle

    2.1 python提供pickle模块实现序列化。

    2.2 pickle.loads(var) # 将变量var中的内容序列化,返回字节串。

    2.3 pickle.dumps(bytes) # 将字节串反序列化成内存中可读的变量的值。

    2.4 pickle.dump(var, fp) # 将变量var序列化,并保存在文件fp中。

    2.5var = pickle.load(fp) # 读取文件fp的内容,并反序列化后存储在变量var中。

    2.6缺点:仅能用于python,且python不同版本的支持情况可能不一样,程序可移植性低。

3. json

    3.1 变量用json序列化后是字符串str类型。

    3.2 json同样拥有loads, dumps, load, dump方法。

    3.3 json序列化或反序列化类对象,需要将类对象进行转换。

猜你喜欢

转载自blog.csdn.net/liufuchun111/article/details/80663487