最近得以空闲,然后继续学习py。
学习一下py中最频繁用到的文件读写的方法。
在py中,操作是通过文件对象【File obj】实现的,通过文件对象可以读写文本文件和一些二进制文件。
1.打开文件
使用Python中的open函数。有8个参数,但是我们常用的就2个足够了。
# 使用所有参数打开文件
with open('example.txt', mode='r', buffering=1, encoding='utf-8', errors='ignore', newline='\n', closefd=True, opener=None) as f:
# 读取文件内容
content = f.read()
print(content)
- file参数
如果是字符串,则代表的是文件名字,文件名字可以是相对当前目录的路径,也可以是绝对路径;如果是一个整数,则代表文件描述符,文件描述符指向一个打开的文件。 - mode参数
下面是常用的文件打开模式:
-
只读模式 (
r
):- 描述:以只读模式打开文件。文件指针将会放在文件的开头。如果文件不存在,会抛出
FileNotFoundError
异常。 - 示例:
open('filename.txt', 'r')
- 描述:以只读模式打开文件。文件指针将会放在文件的开头。如果文件不存在,会抛出
-
写入模式 (
w
):- 描述:以写入模式打开文件。文件指针会放在文件的开头。如果文件不存在,会创建一个新文件。如果文件存在,会截断文件(即清空文件内容)。
- 示例:
open('filename.txt', 'w')
-
追加模式 (
a
):- 描述:以追加模式打开文件。文件指针会放在文件的末尾。如果文件不存在,会创建一个新文件。如果文件存在,写入的数据将会追加到文件的末尾。
- 示例:
open('filename.txt', 'a')
-
读写模式 (
r+
):- 描述:以读写模式打开文件。文件指针会放在文件的开头。如果文件不存在,会抛出
FileNotFoundError
异常。 - 示例:
open('filename.txt', 'r+')
- 描述:以读写模式打开文件。文件指针会放在文件的开头。如果文件不存在,会抛出
-
写入读模式 (
w+
):- 描述:以写入读模式打开文件。文件指针会放在文件的开头。如果文件不存在,会创建一个新文件。如果文件存在,会截断文件。
- 示例:
open('filename.txt', 'w+')
-
追加读模式 (
a+
):- 描述:以追加读模式打开文件。文件指针会放在文件的末尾。如果文件不存在,会创建一个新文件。如果文件存在,写入的数据将会追加到文件的末尾。可以进行读写操作。
- 示例:
open('filename.txt', 'a+')
-
二进制模式 (
b
):- 描述:以二进制模式打开文件。可以与上述模式组合使用,例如
rb
、wb
、ab
、r+b
等。用于读取或写入二进制文件,如图片、音频等。 - 示例:
open('filename.bin', 'rb')
- 描述:以二进制模式打开文件。可以与上述模式组合使用,例如
-
文本模式 (
t
):- 描述:以文本模式打开文件。默认模式,可以与上述模式组合使用,例如
rt
、wt
、at
、r+t
等。用于读取或写入文本文件。 - 示例:
open('filename.txt', 'rt')
- 描述:以文本模式打开文件。默认模式,可以与上述模式组合使用,例如
示例代码
以下是一些打开文件的示例代码:
# 以只读模式打开文本文件
with open('example.txt', 'r', encoding='utf-8') as f:
content = f.read()
# 以写入模式打开文本文件
with open('example.txt', 'w', encoding='utf-8') as f:
f.write("Hello, World!")
# 以追加模式打开文本文件
with open('example.txt', 'a', encoding='utf-8') as f:
f.write("Appending some text.")
# 以二进制模式打开文件
with open('example.bin', 'rb') as f:
binary_content = f.read()
# 以读写模式打开文件
with open('example.txt', 'r+', encoding='utf-8') as f:
f.write("Read and write.")
f.seek(0)
content = f.read()
2.关闭文件
当使用了open打开文件之后,要记得写关闭文件,否则会抛异常。
常规就是调用一次open,然后尾部写一下close。
但是一般情况下,文件的操作往往会抛出异常,为了保证文件的操作无论正常结束还是异常结束都能够关闭文件,使用with as 代码块来进行自动资源管理。
import unittest
class MyTestCase(unittest.TestCase):
def test_something(self):
# self.assertEqual(True, False) # add assertion here
# print("hello world")
fobj = open("test.txt", "w+",encoding="utf-8")
fobj.write("hello world")
fobj.close()
with open("test.txt", "a+",encoding="utf-8") as f:
f.write("\n大家好~")
if __name__ == '__main__':
unittest.main()
这样子执行的话,就是创建了一个文件,往里面写入了一句话。
注意
- 文件有编码的,需要指定
- 用完要关闭