# 文件
# python能够从文件中读取数据
# 1、从文件中读取数据
# 1.1 读取整个文件
# 要读取文件,需要一个包含几行文本的文件
# open()函数接收一个参数,要打开的文件的名称
# python在当前执行的文件所在的目录中查找指定的文件
# 故在下面的例子中python会在demo.py所在的目录中查找test.txt文件
# open()函数将返回一个表示文件的对象,在下面的例子中将返回一个表示文件test.txt的对象,并将其存储在as后面的变量中
# 关键字with在不需要访问文件后将其关闭,python会在不需要使用时自动将其关闭,不会产生文件没有关闭的错误
# 有了表示test.txt的文件对象后,可以使用方法read()读取这个文件的全部内容
with open("test.txt") as file_object: # 读取test.txt文件对象
print(file_object.read()) # 打印test.txt文件中的全部内容
# 1.2 文件路径
# 在上面的例子中python是在当前执行的文件所在的目录中查找的文件
# 如果你需要打开不在程序文件所属目录中的文件,就需要提供文件路径,让python到系统的特定位置去查找
# 其中可以使用相对路径和绝对路径
# 通过绝对路径,可以读取系统任何位置的文件
# 注意Windows系统中文件路径中使用的是反斜杠(/)
with open("C:/Users/Administrator/Downloads/data.txt") as file_object2: # 使用的是绝对路径
print(file_object2.read()) # 打印文件内容
# 1.3 逐行读取
# 可以对文件进行逐行读取
# 为了能够逐行读取文件内容,可以对文件对象执行循环来遍历文件中的每一行
# 会出现很多空白行,可以使用函数rstrip()
with open("test.txt") as file_object3:
for line in file_object3: # 循环遍历文件内容
print(line.rstrip()) # 输出每一行的内容
# 1.4 创建一个包含文件各行内容的列表
# 使用关键字 with 时, open() 返回的文件对象只在 with 代码块内可用。
# 如果要在 with 代码块外访问文件的内容,可在 with 代码块内将文件的各行存储在一个列表中,并在 with 代码块外使用该列表
# readlines()方法从文件中读取每一行,并将其存储在一个列表中
with open("test.txt") as file_object4:
lines = file_object4.readlines() # 将文件中的每一行内容存储在列表lines中
for line in lines:
print(line.rstrip())
# 注意:
# 读取文本文件时,Python将其中的所有文本都解读为字符串。
# 如果你读取的是数字,并要将其作为数值使用,就必须使用函数 int() 将其转换为整数,
# 或使用函数 float() 将其转换为浮点数。
# 2、写入文件
# 保存数据的最简单的方式之一就是将其写入到我呢见中进行保存
# 2.1 写入空文件
# 要想写入文件,需要在调用open()方法时提供另外一个实参,告诉python你要写入打开的文件
# 打开文件时,可以指定读取模式("r")、写入模式("w")、附加模式("a")和能够读取及写入文件的模式("r+")
# 如果你省略模式实参,python将以默认的只读模式打开文件
# python只能将字符串写入文本文件。要将数值数据存储到文本文件中,必须先使用函数str() 将其转换为字符串格式。
with open("test2.txt", "w") as file_object5: # open()方法第一个参数传入要写入文件的文件名,第二个实参("w")是告诉python要以写入模式打开这个文件
file_object5.write("我是写入的数据内容!") # 写入的数据内容
# 2.2 写入多行
# 函数wirte()不会在写入的文本末尾添加换行符,因此如果你要写入多行就要执行换行符
with open("test2.txt", "w") as file_object5: # open()方法第一个参数传入要写入文件的文件名,第二个实参("w")是告诉python要以写入模式打开这个文件
file_object5.write("我是写入的数据内容!\n") # 写入的数据内容
file_object5.write("我是写入的第二行数据!\n")
# 2.3 附加到文件
# 如果要给文件添加内容,而不是覆盖原有的内容,可以以附加模式打开文件
# 以附加模式打开文件时,Python不会在返回文件对象前清空文件,而你写入到文件的行都将添加到文件末尾。
# 如果指定的文件不存在,Python将为你创建一个空文件。
with open("test2.txt", "a") as file_object6: # open()方法第一个参数传入要写入文件的文件名,第二个实参("a")是告诉python要以附加模式打开这个文件
file_object6.write("我是写入的附加数据内容!\n") # 写入的数据内容
file_object6.write("我是写入的附加第二行数据!\n")