Python输出与文件操作¶
约 1453 个字 56 行代码 预计阅读时间 6 分钟
复杂的输出格式控制¶
前面提到在Python中可以使用print函数进行格式化输出,常见的有三种方式:
- 直接输出变量
- 输出格式化字符串
- 输出
f-string
除了上述提到的方式以外,还可以使用字符串对象的方法format()进行格式化,例如下面的代码:
| Python | |
|---|---|
1 2 3 4 5 6 7 | |
Note
关于字符串的格式化操作可以参考格式化字符串语法
格式化字符串字面值¶
在Python中,格式化字符串字面值也被称为f-string,前面简单介绍了f-string,下面再对一些其他内容进行讲解
f-string在字符串前加前缀f或F,通过{expression}表达式,把`Python表达式的值添加到字符串内
除了直接写expression以外,还可以添加格式说明符,例如下面的代码:
| Python | |
|---|---|
1 2 3 4 5 | |
上面的代码中,将数学模块中的pi值保留了3位小数并使用f-string进行打印
文件操作¶
打开文件¶
在Python中,需要进行文件操作先需要使用函数open()打开文件,open函数的原型如下:
| Python | |
|---|---|
1 | |
其中:
- 第一个参数代表需要打开的文件路径字符串
- 第二个参数代表打开方式字符串,其值包括
'r',表示文件只能读取;'w'表示只能写入(现有同名文件会被覆盖,如果文件中有内容会先清空原文件的内容);'a'表示打开文件并追加内容,任何写入的数据会自动添加到文件末尾。'r+'表示打开文件进行读写。默认情况下,这个参数的值为'r' - 第三个参数表示打开文件时的编码
Note
根据官方文档对第三个参数的描述:通常情况下,文件是以文本模式打开的,也就是说,当从文件中读写字符串,这些字符串是以特定的encoding编码的。如果没有指定encoding,默认的是与平台有关的。因为UTF-8是现代事实上的标准,除非你知道你需要使用一个不同的编码,否则建议使用 encoding="utf-8"。在模式后面加上一个'b',可以用二进制模式打开文件。二进制模式的数据是以bytes对象的形式读写的。需要注意,在二进制模式下打开文件时,不能指定第三个参数
关于文件换行符
在文本模式下读取文件时,默认把平台特定的行结束符(Unix上为\n, Windows上为\r\n)转换为\n。在文本模式下写入数据时,默认把\n转换回平台特定结束符。这种操作方式在后台修改文件数据对文本文件来说没有问题,但会破坏JPEG或EXE等二进制文件中的数据。注意,在读写此类文件时,一定要使用二进制模式
基本使用如下:
| Python | |
|---|---|
1 2 3 4 | |
文件对象方法¶
在Python中,文件对象有下面几种常用的方法:
read(size):用于读取文件中的内容,有一个size参数,当不传递实参(省略size)或者传递负数时,表示读取并返回整个文件的内容;当传递size是其他值时,则读取并返回最多size个字符(文本模式,注意还需要考虑换行符\n的个数)或size个字节(二进制模式)。方法返回字符串(文本模式)或字节串对象(在二进制模式下),如果读取到文件结尾,则返回空字符串""readline():用于从文件中读取一行内容,字符串末尾保留换行符\n,只有在文件不以换行符结尾时,文件的最后一行才会省略换行符。空行使用\n表示,该字符串只包含一个换行符。如果读取到文件结尾,则返回空字符串""write(string):把参数string的内容写入文件,并返回写入的字符数。如果需要写入其他内容,要先把它们转化为字符串(文本模式)或字节对象(二进制模式)tell():返回整数,给出文件对象(光标)在文件中的当前位置-
seek(offset, whence):可以改变文件对象的位置。通过向参考点whence添加offset计算位置,第二个参数有下面的取值:- 0,表示从文件开头计算(默认值)
- 1,表示使用当前文件位置
- 2,表示使用文件末尾作为参考点
-
close():关闭文件,注意如果不调用close()函数可能导致write函数写的内容没有从缓冲区到文件中Note
在文本文件(模式字符串未使用
b时打开的文件)中,只允许相对于文件开头搜索,唯一有效的offset值是能从tell()函数中返回的或者0。其他offset值都会产生未定义的行为
例如下面的代码:
| Python | |
|---|---|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | |
使用上面的方法可以实现文件的复制操作:
| Python | |
|---|---|
1 2 3 4 5 | |
上面的for循环等价于下面的while循环:
| Python | |
|---|---|
1 2 3 4 5 | |
with打开文件¶
与Java中的trywith-resources的特性类似,Python中也提供了管理资源的优雅方式:with语句。它确保了即使在代码块执行过程中发生异常,相关的清理工作(比如关闭文件)也会被正确执行。这种方式通常被称为“上下文管理器”,因为with语句创建了一个执行上下文,在这个上下文中自动处理资源的设置和清理
使用with打开文件的方式如下:
| Python | |
|---|---|
1 2 | |
例如下面的代码:
| Python | |
|---|---|
1 2 3 4 5 6 7 | |