这篇博客是作为自己学习python_io功能的记录博客。
我所学习的io内容包括:基本io/文件操作/流操作/网络通信/序列化与反序列化/错误处理和异常/格式化输出/安全性和最佳实践。
基本io:#
最基本的方式是使用print()
函数输出,例如
1 | print("Hello, World!") |
使用help()
方法查询print()
的使用方法,得到
1 | print(...) |
print()
函数还支持格式化输出,例如
1 | name = "Alice" |
1 | name = "Bob" |
使用input()
函数获取用户输入。例如
1 | name = input("Enter your name: ") |
注:
input()
返回的是一个字符串。
help()
得到
1 | input(prompt=None, /) |
如果你的输入是一个列表,可以使用如下方法:
1 | # 输入一个包含数字的字符串,例如 "1 2 3 4" |
文件io:#
打开和关闭文件:#
1 | file=open("file.txt","r") |
open的打开模式 | 含义 |
---|---|
r | 只读(read)模式 |
w | 只写(write)模式,如果文件存在则清空其内容 |
a | 追加(add)模式 |
rb | 二进制(binary)读取 |
wb | 二进制写入 |
二进制写入写出一般用在处理图像文件、处理音频文件、处理视频文件、网络数据传输(文件下载上传)等需要以其原始二进制形式存储和处理的数据时。
更常用的是类似于with open("output.txt","w") as file:
这样的打开文件的形式。原因有:
- with代码块在结束的时候会自动关闭,即使在处理过程中发生了异常也会自动关闭,可以确保资源的正确释放。
- 还可以操作其他类型的对象。比如网络会话,with语句可以确保在推出代码块的时候正确关闭网络连接。这个放在socket再唠。
读取和写入文件:#
文件的读取和写入使用的是文件对象的方法。
1. 使用 read()
函数读取整个文件内容#
这种方法适用于文件较小且可以一次性读取到内存中的情况。
1 | # 以只读方式打开文件 |
2. 逐行读取文件内容#
逐行读取适用于处理大文件或需要逐行处理的情况。
1 | # 以只读方式打开文件 |
这里,文件对象是一种可迭代对象,每次迭代中自动从文件读取下一行,直到文件末尾。从而我们使用line作为媒介来获取文件内容
3. 使用 readlines()
方法读取所有行到列表中#
这种方法会将文件的每一行作为列表中的一个字符串元素。
1 | # 以只读方式打开文件 |
4. 使用 readline()
方法逐行读取文件内容#
可以使用 readline()
方法逐行读取文件内容,直到文件末尾。
1 | # 以只读方式打开文件 |
5. 使用 seek()
和 tell()
控制文件指针位置#
可以使用 seek()
方法来移动文件指针的位置,并使用 tell()
方法获取当前文件指针的位置。
1 | # 以只读方式打开文件 |
6. 使用 with
语句结合二进制读取#
适用于需要处理二进制文件的情况,如图像、音频、视频等。
1 | # 以二进制读取模式打开文件 |
7. 写入文件:#
使用文件对象的write()
方法直接写入数据;
1 | with open('file.txt', 'w') as f: |
使用writelines()
方法写入多行数据。
1 | lines = ['Line 1\n', 'Line 2\n', 'Line 3\n'] |
使用print()
的重定向输入到想要的文件里面。
1 | with open('file.txt', 'w') as f: |
序列化和反序列化:#
所谓序列化和反序列化,是指讲原始的数据结构或对象转换为存储或者传输的的数据、和这个过程的逆过程。通常转化成为字节流或者字符串。
使用pickle或者json模块来完成上述操作,限于目前水瓶,略过;
网络通信:#
详见之后的博客。