【人生苦短,我学 Python】进阶篇——文件处理(Day15)

写在前面:大家好!我是【AI 菌】,一枚爱弹吉他的程序员。我热爱AI、热爱分享、热爱开源! 这博客是我对学习的一点总结与记录。如果您也对 深度学习、机器视觉、算法、Python、C++ 感兴趣,可以关注我的动态,我们一起学习,一起进步~
我的博客地址为:【AI 菌】的博客
我的Github项目地址是:【AI 菌】的Github

-> 前往【人生苦短,我学 Python】总目录 <-

一、读写文件

1.1 读txt文件

(1) 读取文件中的全部内容

# 打开example.txt文件,并返回文件对象file
with open('example.txt') as file:
    # 通过read()读取文件的全部内容,并将其作为一个字符串存储在all_contents中
    all_contents = file.read()
    # 显示全部内容
    print(all_contents)

执行该程序后,输出example.txt文件中的全部内容:

君不见黄河之水天上来,奔流到海不复回。
君不见高堂明镜悲白发,朝如青丝暮成雪。
人生得意须尽欢,莫使金樽空对月。
天生我材必有用,千金散尽还复来。

(2) 逐行读取文件中的内容

with open('example.txt') as file:
    # 遍历文件中的每一行
    for line in file:
        print(line)

执行该程序后,逐行输出example.txt文件中的每一行内容:

君不见黄河之水天上来,奔流到海不复回。

君不见高堂明镜悲白发,朝如青丝暮成雪。

人生得意须尽欢,莫使金樽空对月。

天生我材必有用,千金散尽还复来。

容易发现,输出每一行内容后,都多了一个空行。 这是因为每行的末尾都有一个看不见的换行符,而 print 语句也会加上一个换行符,因此每行末尾都有两个换行符:一个来自文件,另一个来自 print 语句。要消除这些多余的空白行,可在 print 语句中使用 rstrip()

print(line.rstrip())

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

执行该程序后,逐行输出example.txt文件中的每一行内容:

君不见黄河之水天上来,奔流到海不复回。
君不见高堂明镜悲白发,朝如青丝暮成雪。
人生得意须尽欢,莫使金樽空对月。
天生我材必有用,千金散尽还复来。

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!")

执行后,可以发现在你的工程目录下产生了一个新的文件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")

执行后,可以发现生成的新文件writeFile.txt中有两行内容:

I Love Python!
AI Jun Love Python too!

注意:如果在工程目录下已有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!")

执行后,在原内容中新增了一行:

I Love Python!
AI Jun Love Python too!
I Love Python beacause it can work well!

二、存储数据

模块 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)

执行后,在工程目录下生成一个新的文件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)

执行完后,程序在原来的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)

运行结果:

JSON文件中存储的内容是: [1, 2, 3, 4, 5]

-> 回到【人生苦短,我学 Python】总目录 <-

在这里插入图片描述
由于水平有限,博客中难免会有一些错误,有纰漏之处恳请各位大佬不吝赐教!

AI 菌 CSDN认证博客专家 博客专家 CSDN合作伙伴 算法实习僧
研究僧一枚,CSDN博客专家,公众号【AI 修炼之路】作者。专注于无人驾驶(环境感知方向),热衷于分享AI、CV、DL、ML、OpenCV、Python、C++等相关技术文章。
已标记关键词 清除标记
相关推荐
©️2020 CSDN 皮肤主题: 猿与汪的秘密 设计师:白松林 返回首页
实付 19.90元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值