Day11.文件的操作与异常处理

周志华《机器学习》课后习题解答系列(七):Ch6 - 支持向量机 本章学习了支持向量机。基础知识部分包括SVC、软间隔、核技巧、SVR等,实践部分涉及了SVM、SVR的实现。 阅读详情

文件的操作与异常处理



前言

实际开发中常常会遇到对数据进行持久化操作的场景,而实现数据持久化最直接简单的方式就是将数据保存到文件中。说到“文件”这个词,可能需要先科普一下关于文件系统的知识,但是这里我们并不浪费笔墨介绍这个概念,请大家自行通过百度百科进行了解。


一. 读取文件与异常处理

在Python中实现文件的读写操作其实非常简单,通过Python内置的open函数,我们可以指定文件名、操作模式、编码信息等来获得操作文件的对象,接下来就可以对文件进行读写操作了。这里所说的操作模式是指要打开什么样的文件(字符文件还是二进制文件)以及做什么样的操作(读、写还是追加),具体含义如下表所示。

操作模式具体含义
'r'读取 (默认)
'w'写入(会先覆盖之前的内容)
'x'写入,如果文件已经存在会产生异常
'a'追加,将内容写入到已有文件的末尾
'b'二进制模式
't'文本模式(默认)
'+'更新(既可以读又可以写)

用这张自于菜鸟教程的图片为例,它展示了如果根据应用程序的需要来设置操作模式,应该是什么样子。

文件操作

二. 文件的读取

我们再读取文件时,需要在使用open函数时指定好带路径的文件名(可以使用相对路径或者绝对路径)并将文件模式设置为'r'(如果不指定,默认值也是'r',这样给定的位置不会被改变,有时候关于下划线的问题,会使得计算机识别错误,以为是转义符号等),然后通过encoding参数指定编码(如果不指定,默认值是None,那么在读取文件时使用的是操作系统默认的编码,最好还是指定一下。),如果不能保证保存文件时使用的编码方式与encoding参数指定的编码方式是一致的,那么就可能因无法解码字符而导致读取失败。下面的例子演示了如何读取一个纯文本文件。

def main():
    f = open('可爱的晶晶.txt', 'r', encoding='utf-8')
    print(f.read())
    f.close()


if __name__ == '__main__':
    main()

注: 上面的代码,如果open函数指定的文件并不存在或者无法打开,那么将引发异常状况导致程序崩溃。为了让代码有一定的健壮性和容错性,我们可以使用Python的异常机制对可能在运行时发生状况的代码进行适当的处理,如下所示。

def main():
    f = None
    try:
        f = open('可爱的晶.txt', 'r', encoding='utf-8')
        print(f.read())
    except FileNotFoundError:
        print('无法打开指定的文件!')
    except LookupError:
        print('指定了未知的编码!')
    except UnicodeDecodeError:
        print('读取文件时解码错误!')
    finally:
        if f:
            f.close()


if __name__ == '__main__':
    main()

在Python中,我们可以将那些在运行时可能会出现状况的代码放在try代码块中,在try代码块的后面可以跟上一个或多个except来捕获可能出现的异常状况。例如在上面读取文件的过程中,文件找不到会引发FileNotFoundError,指定了未知的编码会引发LookupError,而如果读取文件时无法按指定方式解码会引发UnicodeDecodeError,我们在try后面跟上了三个except分别处理这三种不同的异常状况。最后我们使用finally代码块来关闭打开的文件,释放掉程序中获取的外部资源,由于finally块的代码不论程序正常还是异常都会执行到(甚至是调用了sys模块的exit函数退出Python环境,finally块都会被执行,因为exit函数实质上是引发了SystemExit异常),因此我们通常把finally块称为“总是执行代码块”,它最适合用来做释放外部资源的操作。如果不愿意在finally代码块中关闭文件对象释放资源,也可以使用上下文语法,通过with关键字指定文件对象的上下文环境并在离开上下文环境时自动释放文件资源,代码如下所示。

def main():
    try:
        with open('憨憨的晶晶.txt', 'r', encoding='utf-8') as f:
            print(f.read())
    except FileNotFoundError:
        print('无法打开指定的文件!')
    except LookupError:
        print('指定了未知的编码!')
    except UnicodeDecodeError:
        print('读取文件时解码错误!')


if __name__ == '__main__':
    main()

# 无法打开指定的文件!

除了使用文件对象的read方法读取文件之外,还可以使用for sth-in sth循环逐行读取或者用readlines方法将文件按行读取到一个列表容器中,代码如下所示。

import time


def main():
    # 一次性读取整个文件内容
    with open('可爱的晶晶.txt', 'r', encoding='utf-8') as f:
        print(f.read())

    # 通过for-in循环逐行读取
    with open('可爱的晶晶.txt', mode='r', encoding='utf-8') as f:
        for line in f:
            print(line, end='')
            time.sleep(0.5)
    print()

    # 读取文件按行读取到列表中
    with open('可爱的晶晶.txt', encoding='utf-8') as f:
        lines = f.readlines()
    print(lines)
    

if __name__ == '__main__':
    main()

一定要指定编码,一定要指定编码,一定要指定编码,重要的事情说三遍。不然让计算机自己“猜”的话,经常会猜错的(或许我运气不好吧。。)。

另外,要将文本信息写入文件中也非常简单,在使用open函数时指定好文件名并将文件模式设置为'w'即可。注意如果需要对文件内容进行追加式写入,应该将模式设置为'a'。如果要写入的文件不存在会自动创建文件而不是引发异常。下面展现一个例子:


"""
如何将1-9999之间的素数分别写入三个文件中(1-99之间的素数保存在a.txt中,100-999之间的素数保存在b.txt中,1000-9999之间的素数保存在c.txt中)。
"""
from math import sqrt


def is_prime(n):
    """判断素数的函数"""
    assert n > 0
    for factor in range(2, int(sqrt(n)) + 1):
        if n % factor == 0:
            return False
    return True if n != 1 else False


def main():
    filenames = ('a.txt', 'b.txt', 'c.txt')
    fs_list = []
    try:
        for filename in filenames:
            fs_list.append(open(filename, 'w', encoding='utf-8'))
        for number in range(1, 10000):
            if is_prime(number):
                if number < 100:
                    fs_list[0].write(str(number) + ",")
                elif number < 1000:
                    fs_list[1].write(str(number) + ",")
                else:
                    fs_list[2].write(str(number) + ",")
    except IOError as ex:
        print(ex)
        print('写文件时发生错误!')
    finally:
        for fs in fs_list:
            fs.close()
    print('操作完成!')


if __name__ == '__main__':
    main()

# 操作完成!

三. 二进制文件的读写

知道了如何读写文本文件之后,要读写二进制文件方法类似,下面的代码就实现了复制图片文件的功能。

def main():
    try:
        with open('dd.jpg', 'rb') as fs1:
            data = fs1.read()
            print(type(data))  # <class 'bytes'>
        with open('mm.jpg', 'wb') as fs2:
            fs2.write(data)
    except FileNotFoundError as e:
        print('指定的文件无法打开.')
    except IOError as e:
        print('读写文件时出现错误.')
    print('程序执行结束.')


if __name__ == '__main__':
    main()

四. JSON文件的读写

通过上面的讲解,我们已经知道如何将文本数据和二进制数据保存到文件中,那么这里还有一个问题,如果希望把一个列表或者一个字典中的数据保存到文件中又该怎么做呢?答案是将数据以JSON格式进行保存。JSON是“JavaScript Object Notation”的缩写,它本来是JavaScript语言中创建对象的一种字面量语法,现在已经被广泛的应用于跨平台跨语言的数据交换,原因很简单,因为JSON也是纯文本,任何系统任何编程语言处理纯文本都是没有问题的。目前JSON基本上已经取代了XML作为异构系统间交换数据的事实标准。关于JSON的知识,更多的可以参考JSON的官方网站,从这个网站也可以了解到每种语言处理JSON数据格式可以使用的工具或三方库,下面是一个JSON的简单例子。

{
    "name": "汤姆猫",
    "age": 5,
    "qq": 123456789,
    "friends": ["狄仁杰", "李元芳"],
    "cars": [
        {"brand": "BYD", "max_speed": 180},
        {"brand": "Audi", "max_speed": 280},
        {"brand": "Benz", "max_speed": 320}
    ]
}

可能大家已经注意到了,上面的JSON跟Python中的字典其实是一样一样的,事实上JSON的数据类型和Python的数据类型是很容易找到对应关系的,如下面两张表所示。

PythonJSON
dictobject
list, tuplearray
strstring
int, float, int- & float-derived Enumsnumber
True / Falsetrue / false
Nonenull

我们使用Python中的json模块就可以将字典或列表以JSON格式保存到文件中,代码如下所示。

import json


def main():
    mydict = {
        'name': '汤姆猫',
        'age': 5,
        'qq': 123456789,
        'friends': ['狄仁杰', '李元芳'],
        'cars': [
            {'brand': 'BYD', 'max_speed': 180},
            {'brand': 'Audi', 'max_speed': 280},
            {'brand': 'Benz', 'max_speed': 320}
        ]
    }
    try:
        with open('data.json', 'w', encoding='utf-8') as fs:
            json.dump(mydict, fs)
    except IOError as e:
        print(e)
    print('保存数据完成!')


if __name__ == '__main__':
    main()

# 保存数据完成!

json模块主要有四个比较重要的函数,分别是:

  • dump - 将Python对象按照JSON格式序列化到文件中
  • dumps - 将Python对象处理成JSON格式的字符串
  • load - 将文件中的JSON数据反序列化成对象
  • loads - 将字符串的内容反序列化成Python对象
# 将文件中的JSON数据反序列化成对象
from json import load
with open("data.json", "r") as f:
    data = load(f)

# dump 函数
# 用法:用于把Python的数据格式转变为字符串表达的形式,再存储进文件。
# 参数:第一个是存储的数据内容,第二个是要存储的文件对象。

from json import dump

with open("data.json", "w") as f:
    dump([1, 2, 3], f)

# 用法:将字符串里的内容加载成Python的某种数据格式,如果此方法无法加载识别字符串里的数据格式,会报错。
# 参数:要转换的字符串。

from json import loads

list_1 = "[1, 2, 3, 4]"
new_list = loads(list_1)
print(new_list)


# 用法:将Python的某种数据格式转化为字符串,如果此方法无法加载识别数据结构,会报错。
# 参数:要转换的数据。

from json import dumps

list_1 = [1, 2, 3, 4]
new_list = dumps(list_1)
print(type(new_list))

而关于上面的四个函数的方法,设计到几种重要的概念:

  1. 这里出现了两个概念,一个叫序列化,一个叫反序列化。全球最大的中文百科全书百度百科上对这两个概念是这样解释的:“序列化(serialization)在计算机科学的数据处理中,是指将数据结构或对象状态转换为可以存储或传输的形式,这样在需要的时候能够恢复到原先的状态,而且通过序列化的数据重新获取字节时,可以利用这些字节来产生原始对象的副本(拷贝)。与这个过程相反的动作,即从一系列字节中提取数据结构的操作,就是反序列化(deserialization)”。

  2. 目前绝大多数网络数据服务(或称之为网络API)都是基于HTTP协议提供JSON格式的数据,关于HTTP协议的相关知识,可以看看阮一峰老师的《HTTP协议入门》,如果想了解国内的网络数据服务,可以看看聚合数据和阿凡达数据等网站,国外的可以看看{API}Search网站。下面的例子演示了如何使用requests模块(封装得足够好的第三方网络访问模块)访问网络API获取国内新闻,如何通过json模块解析JSON数据并显示新闻标题,这个例子使用了天行数据提供的国内新闻数据接口,其中的APIKey需要自己到该网站申请。

  3. 在Python中要实现序列化和反序列化除了使用json模块之外,还可以使用pickle和shelve模块,但是这两个模块是使用特有的序列化协议来序列化数据,因此序列化后的数据只能被Python识别。关于这两个模块的相关知识可以自己看看网络上的资料。另外,如果要了解更多的关于Python异常机制的知识,可以看看segmentfault上面的文章《总结:Python中的异常处理》,这篇文章不仅介绍了Python中异常机制的使用,还总结了一系列的最佳实践,很值得一读。


总结

本文主要是学了常见文件的读写操作(本文就展示了txt文件,后面学了pandas在展示excel,csv啥的吧)。还有就是之前一直没接触到的异常处理,毕竟在编程过程中,遇到最多的应该就是bug了,因为大家在使用的过程中肯定会出现各种问题,比如一个GUI,我们用户在使用时,例如输入某些内容时,需要的是int型的正整数,而你输入的是个字符串或者float行的小数,一下子就bug了啊。因为最开始编程的话,一般都是理想状态嘛,但到了真的软件开发的时候,肯定是不能的(虽然我也没有开发过软件,哈哈,吹一吹)。最后就是我们日常编程中常见的数据存贮类型了,JSON的相关操作,也是需要在熟练熟练,这对后面我们学习爬虫的时候会有很大的好处。

溜了遛了,脑壳疼。Loading(11/100)。。。

头歌操作系统2023春季课堂练习2.1:外部中断 本关任务:通过相关知识以及实验回答:版本 1 内核的第 6 次时钟中断发生时,断点和恢复点(指令地址)分别是多少?回答问题:当第一行 0/1 字符全部输出完毕的时候一共发生了几次时钟中断,即第一行完全填满时 jiffies 记录的已发生次数为多少?本关任务:通过实际操作回答在输出第一行 0/1 字符的过程中(如下图所示),共发生了几次时钟中断?2.此时 bochs 虚拟机输出的 0/1 字符串是什么?(只填写数字,不填写空格!根据相关知识进行实际操作,一直输入 c 直到 0/1 将第一行完全填满。 阅读详情

相关推荐

头歌:Python开发技术—文件和异常3( 答案+详细注释)第1关:读取文件内容+第2关:素数写入文件+第3关:输出文件目录+第4关:读写json文件

头歌:Python开发技术—文件和异常3( 答案+详细注释)第1关:读取文件内容+第2关:素数写入文件+第3关:输出文件目录+第4关:读写json文件

Molly 的博客 8046

[python][头歌educoder]ch6 文件和异常-单元测试

python

m0_61709053的博客 1366

【OpenCV】复杂场景下的高精度圆检测实战(附完整代码)

本文针对OpenCV霍夫圆检测在复杂场景下易失效的问题,提出了一套基于轮廓分析的高精度圆检测实战方案。通过图像预处理、轮廓发现及多轮几何筛选(面积、周长、椭圆拟合、多边形逼近),有效排除噪声和类圆干扰物,显著提升复杂场景下的检测鲁棒性,并附完整可调参的Python代码实现。

weixin_29095587的博客 200

操作系统---中断/异常的处理过程

操作系统---中断/异常的处理过程

m0_57449653的博客 1万+

为什么我把「大模型Clouder认证:基于百炼平台构建智能体应用」作为大模型学习的第一站?从 0 到拿证全流程经验分享

【摘要】作为一个刚拿下「大模型 Clouder 认证:基于百炼平台构建智能体应用」的过来人,想在开头就和大家聊聊这个认证的特殊意义 —— 在企业加速 AI 落地的今天,能用低代码快速构建智能体应用,已经成为 AI 从业者的核心竞争力。无论是企业微信客服提效、钉钉机器人自动化办公,还是网站智能助手升级,这些场景化能力正是当下数字化转型的刚需。

davidkorhenn的博客 1527

企业网络架构设计:从内网到外网的无缝通信方案

本文详细解析了企业网络架构设计中的关键技术与实践方案,重点介绍了VLAN划分、OSPF路由优化、安全策略及无线网络集成等核心内容。通过OSPF多区域部署和链路聚合技术,实现内网到外网的无缝通信,提升企业网络性能与安全性。文章还提供了具体的配置示例和最佳实践,助力企业构建高效可靠的网络架构。

weixin_28331555的博客 624

Python-Day08-文件操作和异常处理

Python-100Day-学习打卡 Author: Seven_0507 Date: 2019-05-23

seven的博客 702

Ollama-OCR实战:5分钟搞定PDF文档转Markdown(附qwen2.5vl模型配置)

本文详细介绍了如何利用Ollama本地部署多模态大模型qwen2.5vl,结合OCR技术,实现PDF文档到Markdown的端到端智能转换。通过解析传统OCR的局限与AI方案的优势,并提供从环境搭建、提示词工程到处理复杂表格的完整实战指南,帮助用户高效构建自动化文档处理流水线,彻底重塑文档处理工作流。

yog99的博客 606

Day25 Python的文件操作和异常处理

文件操作、异常、模块、包

lookout99的博客 310

AD18 PCB模块的Copy

在PCB布局时,时常会将元器件先分模块进行排布,最后才会进行总体的布局,在局部布局的时候,想要移动一个模块的器件总是很麻烦,需要选中全部才能进行移动,有些时候还有选漏的情况,所以会将局部布局的模块把它看做一个整体进行移动,效果如下,元件,布线,铜皮,过孔以及元件编号的位置摆放都和源模块一模一样。4、再选中需要复用的模块内的元件,按照第3步的顺序排序,粘贴刚刚复制的Channel Offset参数。在PCB布局时,有多个模块原理图是一模一样的情况,我们可以只画一个模块,之后灵活应用模块,进行copy。

qq_53859658的博客 3239

【深度学习基础】多任务学习(Multi-Task Learning)

多任务学习(Multi-task learning)是和单任务学习(single-task learning)相对的一种机器学习方法。在机器学习领域,标准的算法理论是一次学习一个任务,也就是系统的输出为实数的情况。复杂的学习问题先被分解成理论上独立的子问题,然后分别对每个子问题进行学习,最后通过对子问题学习结果的组合建立复杂问题的数学模型。多任务学习是一种联合学习,多个任务并行学习,结果相互影响。一次只学习一个任务(task),大部分的机器学习任务都属于单任务学习。

十二月的猫 1万+

Day 11 C++异常处理

异常

zjjaibc的博客 1317

【DEIM创新改进】独家下采样创新改进篇 | ECCV 2026 | DEIM 引入FSD-Down频域-空间动态下采样,在下采样过程中保留小目标的高频信息、助力小目标检测、遥感小目标检测有效涨点

🔥本文提出了一种名为FSD-Down的频域-空间动态下采样模块,用于改进DEIM网络模型在小目标检测中的性能。FSD-Down通过小波分解显式保留低频语义和高频细节,结合分组卷积、动态通道权重和可学习缩放因子,自适应强化目标边缘与纹理特征。该模块能有效减轻传统下采样造成的频率混叠和细节丢失,提升对小目标、密集目标和低对比度目标的检测能力。实验表明,FSD-Down计算开销可控,在保持实时性的同时显著提升检测精度,特别是在VisDrone和AITODv2数据集上对小目标的检测性能提升显著。

Ai缝合怪、助力小伙伴高效发论文 82

Day11 - 文件和异常

Day11 - 文件和异常 在实际开发中,常常需要对程序中的数据进行持久化操作,而实现数据持久化最直接简单的方式就是将数据保存到文件中。说到“文件”这个词,可能需要先科普一下关于文件系统的知识,对于这个概念,维基百科上给出了很好的诠释,这里不再浪费笔墨。 在Python中实现文件的读写操作其实非常简单,通过Python内置的open函数,我们可以指定文件名、操作模式、编码信息等来获得操作文件的对象...

Laic Zhang的博客 1433

测风数据垂直外推(原理及Windowgrapher操作示范)

垂直外推

weixin_46713695的博客 896

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

python 学习Day11模块,文件IO,异常处理

文章目录20.模块:Modules1.概念理解2.模块的分类3.模块使用5.主程序执行:6.python中的包:7.第三方模块21.文件IO关于列表元组,元组,字典,集合的写入关于编码和解码:目录操作22.异常处理 20.模块:Modules #模块就是一堆有特殊功能的代码块 #模块也叫库, 1.概念理解 ​ 模块就是.py文件,模块名要避免与函数名重名,变量名冲突 ​ 通常,把能够实现某一特定功能的代码放在.py文件里 2.模块的分类 1.标准模块:python3自带的模块,例如:re模块,random模

wozhomouren的博客 242

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

刻意练习Python基础 ——day 11:异常处理

17天 —— Python基础刻意练习 Day 01——Task01:变量、运算符与数据类型 Day 02——Task02:条件与循环 Day 03——Task03:列表与元组(上) Day 04——Task03:列表与元组(下) Day 05——Task04:字符串与序列 Day 06——Task05:函数与Lambda表达式(上) Day 07——Task05:函数与Lambda表达式...

iiVax的博客 463

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

每日一题Day11~Day16

每日一题Day11~Day16 标识符不能以数字开头,中间不能有空格 Jack把null给覆盖掉了

qq_57603004的博客 943

Day11:文件和异常

上对这两个概念是这样解释的:“序列化(serialization)在计算机科学的数据处理中,是指将数据结构或对象状态转换为可以存储或传输的形式,这样在需要的时候能够恢复到原先的状态,而且通过序列化的数据重新获取字节时,可以利用这些字节来产生原始对象的副本(拷贝)。参数指定编码(如果不指定,默认值是None,那么在读取文件时使用的是操作系统默认的编码),如果不能保证保存文件时使用的编码方式与encoding参数指定的编码方式是一致的,那么就可能因无法解码字符而导致读取失败。...

Sumarua的博客 1129

python基础 - 11、模块包、文件操作、json数据、异常处理

python语言基础 - day12~13 模块包以及文件操作 1、模块 1)什么是模块 python中的每一个py文件都是一个模块,可以在一个模块中去使用另外模块的全局变量(变量、函数、类),但是需要提前导入该模块 2)如何导入模块 导入模块的方法总结起来有以下几种: a.import 模块名 - 导入模块中没有被阻止导入的所有的全局变量:'模块名.' b.import 模块名 as 别名 - 导入模块中的所有全局变量:'别名.' c.from 模块名 import 变量名 - 导入模块中的指定变量:直

weixin_41810571的博客 386

Java 基础 整个基础班 day11 -- day15 完整学习知识(代码+练习+打印结果)跟着手把手敲一遍就会

自定义异常就是系统打印的信息并不能满足自己的需求,想通过自己的加工和特俗的逻辑处理显示出来。// 自定义异常类:余额不足异常//InsufficientFundsException是继承Exception(并不是自定义)//对异常的内容进行加工,写自己想写,但是本例子没有写自己的逻辑进行特殊的处理,而是自己使用父类的语句,super(message);// 银行账户类// 取款方法throw new InsufficientFundsException("余额不足!

weixin_38716347的博客 1119

【Python-Day 36】解密文件IO:一文搞懂 Python 读写模式、编码与指针操作

在编程世界中,数据不能只活在内存里。程序关闭后,内存中的所有变量和数据都会烟消云散。为了让数据能够被永久保存、重复使用和跨程序共享,我们需要将它们存储到文件中。这就是文件操作(File I/O)的意义所在。本篇文章将系统地、深入浅出地讲解 Python 中文件读写的全部核心知识,从最基础的文件打开,到各种读写模式、编码处理,再到文件指针的精准控制,并结合丰富的代码示例和实际应用场景,帮助你彻底掌握这项任何 Python 开发者都必须具备的关键技能。

吴师兄大模型的博客 2818

Python基础学习简记--异常处理(Day11)

Python基础学习简记–异常处理(Day11) 标准异常 try except finally raise

weixin_39344224的博客 341

day11:Python异常处理

Python异常处理 异常 异常就是一个在程序运行中影响程序正常进行的事件;对于Python来说,异常是一个对象,表示一个错误。 常见错误类型 BaseException 所有异常的基类 SystemExit 解释器请求退出 KeyboardInterrupt 用户中断执行(通常是输入^C) Exception 常规错误的基类 StopIteration 迭代器没有更多的值 GeneratorEx...

yyw1108的博客 230

day11 文件和异常

day11 文件和异常 #读写文本文件 def main(): f =open("twoone.txt","r",encoding="utf-8") print(f.read()) f.close main() ———————————————————————————————————————————— #读写文本文件,异常处理 def main(): f = Non...

qq_22017379的博客 162

Day 34 Springboot基础11统一异常处理

异常处理 异常(exception) 是程序运行过程中发生的事件, 该事件可以中断程序指令的正常执行流程. 1当Java程序运行时出现问题时,系统会自动检测到该错误,并立即生成一个与该错误对应的异常对象 2:然后把该异常对象提交给JAVA虚拟机 3:JAVA虚拟机会自动寻找相应的处理代码来处理这个异常,如果没有找到,则程序终止 4:程序员可以自己编写代码来扑捉可能出现的异常,并编写代码来处理相应的...

fggsgnhz的博客 183
上一篇: Day09.面向对象进阶
下一篇: Day12.字符串与正则表达式
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值