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 |
|