【人生苦短,我学 Python】进阶篇——文件处理(Day15)
写在前面:大家好!我是【AI 菌】,一枚爱弹吉他的程序员。我
热爱AI、热爱分享、热爱开源
! 这博客是我对学习的一点总结与记录。如果您也对深度学习、机器视觉、算法、Python、C++
感兴趣,可以关注我的动态,我们一起学习,一起进步~
我的博客地址为:【AI 菌】的博客
我的Github项目地址是:【AI 菌】的Github
一、读写文件
1.1 读txt文件
(1) 读取文件中的全部内容
# 打开example.txt文件,并返回文件对象file
with open('example.txt') as file: # 通过read()读取文件的全部内容,并将其作为一个字符串存储在all_contents中 all_contents = file.read() # 显示全部内容 print(all_contents)
- 1
- 2
- 3
- 4
- 5
- 6
执行该程序后,输出example.txt文件中的全部内容:
君不见黄河之水天上来,奔流到海不复回。
君不见高堂明镜悲白发,朝如青丝暮成雪。
人生得意须尽欢,莫使金樽空对月。
天生我材必有用,千金散尽还复来。
- 1
- 2
- 3
- 4
(2) 逐行读取文件中的内容
with open('example.txt') as file: # 遍历文件中的每一行 for line in file: print(line)
- 1
- 2
- 3
- 4
执行该程序后,逐行输出example.txt文件中的每一行内容:
君不见黄河之水天上来,奔流到海不复回。
君不见高堂明镜悲白发,朝如青丝暮成雪。
人生得意须尽欢,莫使金樽空对月。
天生我材必有用,千金散尽还复来。
- 1
- 2
- 3
- 4
- 5
- 6
- 7
容易发现,输出每一行内容后,都多了一个空行。 这是因为每行的末尾都有一个看不见的换行符,而 print 语句也会加上一个换行符,因此每行末尾都有两个换行符:一个来自文件,另一个来自 print 语句。要消除这些多余的空白行,可在 print 语句中使用 rstrip() :
print(line.rstrip())
- 1
(3) 创建一个包含文件各行内容的列表
使用关键字 with 时, open() 返回的文件对象只在 with 代码块内可用。如果要在 with 代码块外访问文件的内容,可在 with 代码块内将文件的各行存储在一个列表中,并在 with 代码块外使用该列表:你可以立即处理文件的各个部分,也可推迟到程序后面再处理。
下面的示例在 with 结构中将文件 example.txt 的各行存储在一个列表中,再在 with 代码块外打印它们:
with open("example.txt") as file: # 从文件中读取每一行,并将其存储在一个列表lines中 lines = file.readlines()
# 逐行打印内容
for line in lines: print(line.rstrip())
- 1
- 2
- 3
- 4
- 5
- 6
执行该程序后,逐行输出example.txt文件中的每一行内容:
君不见黄河之水天上来,奔流到海不复回。
君不见高堂明镜悲白发,朝如青丝暮成雪。
人生得意须尽欢,莫使金樽空对月。
天生我材必有用,千金散尽还复来。
- 1
- 2
- 3
- 4
1.2 写txt文件
(1) 写入空文件
在前面的示例中,我们使用的open()其实包含两个参数:
- 第一个参数filename。表示到打开或者写入的文件名;
- 第二个参数mode。模式有三种选择:读取模式(‘r’)、写入模式(‘w’)、附加模式(‘a’)。如果你省略了模式实参, Python 将以默认的只读模式打开文件。
要将文本写入文件,你在调用 open() 时需要提供另一个实参——写入模式(‘w’),告诉 Python 你要写入打开的文件。为明白其中的工作原理,我们来将一条简单的消息存储到文件中:
# 以写入模式打开文件
with open("writeFile.txt", "w") as file: # write()将一个字符串写入文件 file.write("I Love Python!")
- 1
- 2
- 3
- 4
执行后,可以发现在你的工程目录下产生了一个新的文件writeFile.txt,该文件中的内容是:I Love Python!
注意:Python 只能将字符串写入文本文件。要将数值数据存储到文本文件中,必须先使用函数 str() 将其转换为字符串格式。
(2) 写入多行
函数 write() 不会在你写入的文本末尾添加换行符,因此你可以在写入时指定换行符:
# 以写入模式打开文件
with open("writeFile.txt", "w") as file: # write()将一个字符串写入文件,并换行 file.write("I Love Python!\n") file.write("AI Jun Love Python too!\n")
- 1
- 2
- 3
- 4
- 5
执行后,可以发现生成的新文件writeFile.txt中有两行内容:
I Love Python!
AI Jun Love Python too!
- 1
- 2
注意:如果在工程目录下已有writeFile.txt文件,则新写入的内容会覆盖原来的所有内容。
(3) 文件添加新内容
如果你要给文件添加内容,而不是覆盖原有的内容,可以 附加模式 打开文件。你以附加模式打开文件时, Python 不会在返回文件对象前清空文件,而你写入到文件的行都将添加到文件末尾。如果指定的文件不存在, Python 将为你创建一个空文件。
接下来,在既有文件 writeFile.txt 中再添加一些新的内容:
with open("writeFile.txt", "a") as file: # 在原来writeFile.txt文件中新添内容 file.write("I Love Python beacause it can work well!")
- 1
- 2
- 3
执行后,在原内容中新增了一行:
I Love Python!
AI Jun Love Python too!
I Love Python beacause it can work well!
- 1
- 2
- 3
二、存储数据
模块 json 让你能够将简单的 Python 数据结构转储到文件中,并在程序再次运行时加载该文件中的数据。你还可以使用 json 在 Python 程序之间分享数据。更重要的是, JSON 数据格式并非 Python 专用的,这让你能够将以 JSON 格式存储的数据与使用其他编程语言的人分享。这是一种轻便格式,很有用,也易于学习。
JSON ( JavaScript Object Notation )格式最初是为 JavaScript 开发的,但随后成了一种常见格式,被包括 Python 在内的众多语言采用。
2.1 写入json文件
使用 json.dump() 将数据存储到JSON文件中:
# 导入模块 json
import json
# 新建一个列表
numbers = [1,2,3,4,5]
# 以写入模式打开这个文件new.json
with open("new.json", "w") as file: # 使用json.dump()将数字列表存储到文件中 json.dump(numbers, file)
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
执行后,在工程目录下生成一个新的文件new.json,文件中存储着新添的数据:[1, 2, 3, 4, 5]
注:json是Python中的内置模块,在编写相关程序时,可以直接使用import导入,不需要额外的安装json库。
2.2 向json文件中添加内容
以写入模式打开文件,写入的内容会覆盖原来文件中的内容。有时希望在源文件中添加新的内容,这时就必须以附加模式打开文件,如下所示:
# 导入模块 json
import json
# 新建一个列表
list = [6, 7, 8, 9, 10]
# 以附加模式打开这个文件new.json
with open("new.json", "a") as file: # 使用json.dump()将数字列表存储到文件中 json.dump(list, file)
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
执行完后,程序在原来的new.json文件中新添了内容:[6, 7, 8, 9, 10]
2.3 读取json文件
接下来,使用函数 json.load() 将JSON文件中的列表读取到内存中:
# 导入模块 json
import json
# 以只读模式打开这个文件new.json
with open("new.json", "r") as file: # 使用json.load()将JSON文件中的内容读取到内存 list = json.load(file)
print("JSON文件中存储的内容是:", list)
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
运行结果:
JSON文件中存储的内容是: [1, 2, 3, 4, 5]
- 1
由于水平有限,博客中难免会有一些错误,有纰漏之处恳请各位大佬不吝赐教!
文章来源: ai-wx.blog.csdn.net,作者:AI 菌,版权归原作者所有,如需转载,请联系作者。
原文链接:ai-wx.blog.csdn.net/article/details/113874056
- 点赞
- 收藏
- 关注作者
评论(0)