Python小白入门:文件、异常处理和json格式存储数据

这篇具有很好参考价值的文章主要介绍了Python小白入门:文件、异常处理和json格式存储数据。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

所用资料

代码中所用到的文件可以从下面的网站进行下载:
https://www.ituring.com.cn/book/2784
Python小白入门:文件、异常处理和json格式存储数据,Python笔记,python,json,java,pycharm,开发语言

一、从文件中读取数据

1.1 读取整个文件

Python小白入门:文件、异常处理和json格式存储数据,Python笔记,python,json,java,pycharm,开发语言

with open('files/pi_digits.txt') as file_object:
    contents = file_object.read()
print(contents)

Python小白入门:文件、异常处理和json格式存储数据,Python笔记,python,json,java,pycharm,开发语言

  • open函数

打开一个文件。接收参数为需要打开的文件名。Python会在当前执行的文件所在目录下查找指定文件,因此需要把pi_digits.txt文件放在执行文件的同目录下。
open函数返回一个表示文件的对象,Python将通过as关键字该对象赋予file_object。

  • with关键字

再不需要访问文件后,Python会将其自动关闭。比直接使用close函数(关闭文件函数)更加安全。

  • read函数

读取文件内容,以字符串形式赋给contents变量。read函数在读取到文件末尾时会返回一个空字符串,打印出来就是一个空行,可以对contents中使用rstrip函数进行结尾的空行删除。

with open('pi_digits.txt') as file_object:
    contents = file_object.read()
print(contents.rstrip())

Python小白入门:文件、异常处理和json格式存储数据,Python笔记,python,json,java,pycharm,开发语言
可以看到空白行被删除掉了。

1.2 文件路径

  • 相对路径: 相对于当前运行的程序所在的目录位置进行查找。如当前运行的程序为python_work,其中有一个名为files的文件夹存储了file.txt文件,路径为: files\file.txt,python会自动在python_work中寻找。

  • 绝对路径:计算机中文件存储的准确位置,如:C:学习\Python从入门到实践第二版源代码文件\源代码文件\chapter_10。因为绝对路径较长,一般会将该字符串先赋给一个变量file_path,然后传入Open函数中

:显示文件路径时,Windows系统使用反斜杠(\ )而不是斜杠(/ ),但在代码中使用斜杠来代表路径。

1.3 逐行读取

以每一行的方式读取文件:使用for循环。

file_path = 'files/pi_digits.txt'
with open(file_path) as file_object:
    for line in file_object:
        print(line.rstrip())

使用for循环,让变量line代表文件中的每一行进行输出。

Python小白入门:文件、异常处理和json格式存储数据,Python笔记,python,json,java,pycharm,开发语言

1.4 创建一个包含文件各行内容的列表

  • readlines函数:从文件中读取每一行并将其存储在一个列表中。
  • readline函数:从文件中读取一行,并作为字符串保存。
file_path = 'files/pi_digits.txt'
with open(file_path) as file_object:
    line = file_object.readline()
    lines = file_object.readlines()

print(line)
print(lines)

代码使用lines接收readlines函数读到的存储文件中的每一行内容的列表。
可以看到每一行后面都有一个换行符。

Python小白入门:文件、异常处理和json格式存储数据,Python笔记,python,json,java,pycharm,开发语言
读取到的lines即可使用for循环进行每一行内容的读取。

1.5 使用文件的内容

将文件读取到内存中后即可使用数据。

Python中有三个去除头尾字符、空白符的函数,它们依次为:

  • strip: 用来去除头尾字符、空白符(包括\n、\r、\t、’ ‘,即:换行、回车、制表符、空格)
  • lstrip:用来去除开头字符、空白符(包括\n、\r、\t、’ ‘,即:换行、回车、制表符、空格)
  • rstrip:用来去除结尾字符、空白符(包括\n、\r、\t、’ ',即:换行、回车、制表符、空格)

为了把文件中拿到的内容整合成一行没有中间空白字符的字符串,使用strip函数进行去空白。

去空白函数

file_path = 'files\pi_digits.txt'

with open(file_path) as file_objects:
    lines = file_objects.readlines()

pi_strings = ""
for line in lines:
    pi_strings += line.strip()

print(pi_strings)
print(len(pi_strings))
pi_number = float(pi_strings)
print(pi_number)
print(type(pi_number))

strip函数不仅可以删除每行后面的空白字符,还可以把每行开头的空白符也进行删除。这样就得到了一个pi_string的字符串。

如果想后续进行数值的计算,需要把字符串转为数值进行使用,可以使用float函数进行类型转换。

Python小白入门:文件、异常处理和json格式存储数据,Python笔记,python,json,java,pycharm,开发语言

1.6 包含一百万位的大型文件

所需文件:

Python小白入门:文件、异常处理和json格式存储数据,Python笔记,python,json,java,pycharm,开发语言

读取一个精确到小数点后1000000位的圆周率文件。

file_path = 'files/pi_million_digits.txt'

with open(file_path) as file_objects:
    lines = file_objects.readlines()

pi_string = ""
for line in lines:
    pi_string += line.strip()

print(pi_string[:52])
print(len(pi_string))

打印前52位,然后输出一下字符串的长度,证明确实是有1000002位数。

Python小白入门:文件、异常处理和json格式存储数据,Python笔记,python,json,java,pycharm,开发语言

1.7 圆周率值中包含你的生日吗

可以查看一下自己的生日是否在圆周率中,如果存在,使用index函数查找到生日字符串在pi字符串中的位置并且输出。

file_path = 'files/pi_million_digits.txt'

with open(file_path) as file_objects:
    lines = file_objects.readlines()

pi_string = ""
for line in lines:
    pi_string += line.strip()

birthday = input("Please enter your birthday, in the form mmdd: ")

if birthday in pi_string:
    print(f"Your birthday appears in the first million digits of pi at the index of {pi_string.index(birthday)}!")
else:
    print("Sorry~")

练习题

Python小白入门:文件、异常处理和json格式存储数据,Python笔记,python,json,java,pycharm,开发语言
Python小白入门:文件、异常处理和json格式存储数据,Python笔记,python,json,java,pycharm,开发语言

file_path = 'files/learning_python.txt'

with open(file_path) as file_objects:
    contents = file_objects.read()
print(contents)

with open(file_path) as file_objects:
    for line in file_objects:
        print(line.rstrip())

with open(file_path) as file_objects:
    lines = file_objects.readlines()
print(lines)

Python小白入门:文件、异常处理和json格式存储数据,Python笔记,python,json,java,pycharm,开发语言

file_path = 'files/learning_python.txt'

with open(file_path) as f:
    lines = f.readlines()

for line in lines:
    print(line.rstrip().replace('Python','c++'))

Python小白入门:文件、异常处理和json格式存储数据,Python笔记,python,json,java,pycharm,开发语言

二、写入文件

2.1 写入空文件

调用open() 时提供了两个实参:

  • 第一个实参:要打开的文件的名称。
  • 第二个实参(‘w’ ):告诉Python要以写入模式打开这个文件。

打开文件时,可指定读取模式 (‘r’ )、写入模式 (‘w’ )、附加模式 (‘a’ )或读写模式 (‘r+’ )。如果省略了模式实参,Python将以默认的只读模式打开文件。

如果要写入的文件不存在,函数open() 将自动创建它

然而,以写入模式(‘w’)打开文件时千万要小心,因为如果指定的文件已经存在,Python将在返回文件对象前清空该文件的内容。

Python只能将字符串写入文本文件。 要将数值数据存储到文本文件中,必须先使用函数str() 将其转换为字符串格式。

filename = 'programming.txt'

with open(filename,'w') as f:
    f.write('I love programming!')

Python小白入门:文件、异常处理和json格式存储数据,Python笔记,python,json,java,pycharm,开发语言

2.2 写入多行

在writer函数中添加换行符。

filename = 'programming.txt'

with open(filename,'w') as f:
    f.write('I love writing!\n')
    f.write('I love programming!\n')

Python小白入门:文件、异常处理和json格式存储数据,Python笔记,python,json,java,pycharm,开发语言

2.3 附加到文件

如果不想覆盖掉之前的内容,而是想给文件添加内容的话,可以以附加模式(a) 打开文件。

以附加模式打开文件时,Python不会在返回文件对象前清空文件的内容,而是将写入文件的行添加到文件末尾。

如果指定的文件不存在,Python将为你创建一个空文件。

filename = 'programming.txt'

with open(filename,'a') as f:
    f.write('I love painting!\n')
    f.write('I love swimming!\n')

with open(filename) as f:
    lines = f.read()
print(lines)

Python小白入门:文件、异常处理和json格式存储数据,Python笔记,python,json,java,pycharm,开发语言

练习题

Python小白入门:文件、异常处理和json格式存储数据,Python笔记,python,json,java,pycharm,开发语言

10-3

filename = 'guests.txt'
name = input('enter the name: ')
with open(filename,'w') as f:
    f.write(name.title())

10-4

filename = 'guest_book.txt'
with open (filename,'a') as f:
    while True:
        name = input("Enter the name: ")
        if name == 'q':
            break
        print(f"Hi, {name.title()} !")
        f.write(f"{name.title()}\n")

Python小白入门:文件、异常处理和json格式存储数据,Python笔记,python,json,java,pycharm,开发语言
Python小白入门:文件、异常处理和json格式存储数据,Python笔记,python,json,java,pycharm,开发语言
10-5

filename = 'reason.txt'
with open(filename,'a') as f:
    while True:
        reason = input('Enter the reason why you like programming')
        if reason=='quit':
            break
        f.write(f"{reason}\n")

三、异常

异常:一个特殊对象,管理程序执行期间发生的错误。
每当发生让Python不知所措的错误时,它都会创建一个异常对象。如果你编写了处理该异常的代码,程序将继续运行;如果未对异常进行处理,程序将停止并显示traceback,其中包含有关异常的报告。

异常是使用try-except 代码块处理的。
try-except 代码块让Python执行指定的操作,同时告诉Python发生异常时怎么办。使用try-except 代码块时,即便出现异常,程序也将继续运行:显示你编写的友好的错误消息,而不是令用户迷惑的traceback。

3.1 ZeroDivisionError异常

ZeroDivisionError异常:被除数不能为0的异常。

Python小白入门:文件、异常处理和json格式存储数据,Python笔记,python,json,java,pycharm,开发语言

3.2 使用 try - except 模块

当认为可能会发生错误时,可编写一个try-except 代码块来处理可能引发的异常。

  • try下写让Python尝试运行一些代码,
  • except下写如果这些代码引发了指定的异常该怎么办。
try:
    print(5/0)
except ZeroDivisionError:
    print("You can't divide by zero! ")

将导致错误的代码行 print(5/0) 放在一个try 代码块中。如果try 代码块中的代码运行起来没有问题,Python将跳过except 代码块;如果try 代码块中的代码导致了错误,Python将查找与之匹配的except 代码块并运行其中的代码。

在本例中,try 代码块中的代码引发了ZeroDivisionError 异常,因此Python查找指出了该怎么办的except 代码块,并运行其中的代码。这样,用户看到的是一条友好的错误消息,而不是traceback。

3.3 try - except - else 代码块

使用try-except进行异常处理,而依赖try代码块成功执行的代码都应放到else代码块中。

while True:
    n1 = input("First number: ")
    if n1 == 'q':
        break
    n2 = input('Second number: ')
    if n2 == 'q':
        break
    try:
        result = int(n1)/int(n2)
    except ZeroDivisionError:
        print("You can't divide by 0!")
    else:
        print(result)

Python小白入门:文件、异常处理和json格式存储数据,Python笔记,python,json,java,pycharm,开发语言

3.4 处理 FileNotFoundError 异常

FileNotFoundError 异常:找不到文件
Python小白入门:文件、异常处理和json格式存储数据,Python笔记,python,json,java,pycharm,开发语言

filename = 'alice.txt'

try:
    with open(filename) as f:
        contents = f.read()
        
except FileNotFoundError:
    print(f"{filename} doesn't exit!")

Python小白入门:文件、异常处理和json格式存储数据,Python笔记,python,json,java,pycharm,开发语言

3.5 分析文本的字符

统计alice.txt文件中所有的英文单词数量。
Python小白入门:文件、异常处理和json格式存储数据,Python笔记,python,json,java,pycharm,开发语言

  • split()函数:为一个字符串中的英文单词创建一个单词列表
  • encoding = ‘utf-8’:当系统默认编码和读取文件使用的编码不一致时使用。
filename = 'alice.txt'

try:
    with open(filename,encoding = 'utf-8') as f:
        contents = f.read()

except FileNotFoundError:
    print(f"{filename} doesn't exit!")

else:
    words = contents.split()
    num_word = len(words)
    print(f"The file {filename} has about {num_word} words.")

Python小白入门:文件、异常处理和json格式存储数据,Python笔记,python,json,java,pycharm,开发语言

3.6 分析多个文件

filenames = [‘alice.txt’,‘siddhartha.txt’,‘mobd_dick.txt’]

其中siddhartha.txt文件不存在。使用for循环对文件列表中的文件一次读取并且分析。

def count_words(filename):
    try:
        with open(filename, encoding='utf-8') as f:
            contents = f.read()

    except FileNotFoundError:
        print(f"{filename} doesn't exit!")

    else:
        words = contents.split()
        num_word = len(words)
        print(f"The file {filename} has about {num_word} words.")

filenames = ['alice.txt','siddhartha.txt','moby_dick.txt']
for filename in filenames:
    count_words(filename)

Python小白入门:文件、异常处理和json格式存储数据,Python笔记,python,json,java,pycharm,开发语言

3.7 遇到异常时保持静默

如果想要发生异常时程序什么也不说,像什么都没有发生过一样继续执行,那就在except模块下使用pass语句

def count_words(filename):
    try:
        with open(filename, encoding='utf-8') as f:
            contents = f.read()

    except FileNotFoundError:
        pass

    else:
        words = contents.split()
        num_word = len(words)
        print(f"The file {filename} has about {num_word} words.")

filenames = ['alice.txt','siddhartha.txt','moby_dick.txt']
for filename in filenames:
    count_words(filename)

Python小白入门:文件、异常处理和json格式存储数据,Python笔记,python,json,java,pycharm,开发语言

练习题

Python小白入门:文件、异常处理和json格式存储数据,Python笔记,python,json,java,pycharm,开发语言
Python小白入门:文件、异常处理和json格式存储数据,Python笔记,python,json,java,pycharm,开发语言

10-6

try:
    n1 = int(input("the first number is :"))
    n2 = int(input("The second number is :"))
except ValueError:
    print("Please enter number not text!")
else:
    print(n1+n2)

10-7

while True:
    try:
        n1 = int(input("the first number is :"))
        n2 = int(input("The second number is :"))
    except ValueError:
        print("Please enter number not text!")
    else:
        print(n1+n2)

10-8

四、存储数据

JSON格式:存储数据结构,最初是为JavaScript开发,但随后成了一种常见格式,被包括Python在内的众多语言采用。

模块json 让你能够将简单的Python数据结构转储到文件中,并在程序再次运行时加载该文件中的数据。

还可以使用json 在Python程序之间分享数据。

更重要的是,JSON数据格式并非Python专用的,JSON格式存储的数据可以与使用其他编程语言共享。

4.1 使用json.dump( )和json.load( )

  • 函数json.dump() : 把数据存储在文件中。接受两个实参,要存储的数据,以及可用于存储数据的文件对象。

  • json.load() : 把数据读取到内存中。

import json
numbers = [2,3,4,5,7.11,13]
filename = 'numbers.json'
with open(filename,'w') as f:
    json.dump(numbers,f)

首先import json模块,然后使用json.dump把数字列表存储进number.json文件中。

Python小白入门:文件、异常处理和json格式存储数据,Python笔记,python,json,java,pycharm,开发语言

使用json.load(f)把numbers.json文件中的数据结构存进内存中,然后打印输出。

import json
filename = 'numbers.json'
with open(filename) as f:
    numbers = json.load(f)
print(numbers)

Python小白入门:文件、异常处理和json格式存储数据,Python笔记,python,json,java,pycharm,开发语言文章来源地址https://www.toymoban.com/news/detail-643630.html

4.2 保存和读取用户生成的数据

到了这里,关于Python小白入门:文件、异常处理和json格式存储数据的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Python零基础入门(十一)——异常处理

    个人简介:机电专业在读研究生,CSDN内容合伙人,博主个人首页 Python入门专栏:《Python入门》欢迎阅读,一起进步!🌟🌟🌟 码字不易,如果觉得文章不错或能帮助到你学习,可以点赞👍收藏📁评论📒+关注哦!😊😊😊 欢迎来到本系列的第十一篇文章!在前面的学习中

    2024年02月14日
    浏览(41)
  • Python的pandas库来实现将Excel文件转换为JSON格式的操作

    ✅作者简介:2022年 博客新星 第八 。热爱国学的Java后端开发者,修心和技术同步精进。 🍎个人主页:Java Fans的博客 🍊个人信条:不迁怒,不贰过。小知识,大智慧。 💞当前专栏:Python案例分享专栏 ✨特色专栏:国学周更-心性养成之路 🥭本文内容:Python的pandas库来实现

    2024年02月09日
    浏览(34)
  • Python文件操作和异常处理:高效处理数据的利器

    重温Python,适合新手搭建知识体系,也适合大佬的温故知新~ 1.1 文件操作和异常处理对于编程的重要性 文件操作和异常处理对于编程非常重要。它们使得我们能够处理文件数据、持久化数据、导入和导出数据,并且能够优雅地处理和解决错误,提高程序的可靠性和稳定性。

    2024年01月23日
    浏览(39)
  • Python对json文件的读取和处理

    JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,它通过易于读取和编写的文本格式来传输和存储数据。在JSON中,数据被保存为键值对的形式。比较常见的JSON键值对形式为:key:value。其中,key为字符串,value则可以是字符串、数字、数组、以及其他的JSON对象。另外

    2024年04月25日
    浏览(23)
  • 利用python将json格式的文件导入neo4j图数据库

    笔者收到了朋友的求助,希望我写一段python代码将含对用关系的json文件导入neo4j图数据库。json的格式如下: 他说数据量有几十万条,而且对应关系不唯一:但可以保证每条都含有名称和治疗,但是可能有若干条其他的对用关系,例如上文的例子:其既包含之前的三个模块,

    2024年02月16日
    浏览(31)
  • PTA Python作业7文件及异常处理

    目录 判断题 单选题 函数题 6-1 jmu-python-判断质数 编程题 7-1 下标异常 7-2 try-except-else异常 7-3 综合题:学生成绩输入及输出 1-1Python内置的open函数,打开文件的时候可能会产生异常。(T) 1-2二进制文件不能使用记事本程序打开。(F) 1-3Python对文件的操作中,close函数用于文件关闭

    2024年02月08日
    浏览(31)
  • Mysql存储json格式数据需要掌握的

    最近做的一个 填报项目,由于填报的字段比较多于是便在数据库当中使用了 longtext 类型的字段直接存储 json 数据。 为什么选择直接存储json数据? 业务比较复杂,涉及到很多 一对多 的多表关联,假如拆分存到各个业务表,那么每次查询修改是非常繁琐的,存储json一张表即

    2024年02月08日
    浏览(26)
  • 【100天精通python】Day28:文件与IO操作_JSON文件处理

      目录   专栏导读  1. JSON数据格式简介 1.1 示例JSON数据 1.2 JSON文件的特点 

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

    自己敲一遍这个代码,注释我写的超级详细,一定可以明白! 内容原创,请勿转载  知识点学习参考: 1.基本读写常用指令: 一文搞懂Python文件读写 - 知乎 (zhihu.com) 2.文件遍历知识总结:  (205条消息) python遍历文件夹下的所有文件_python遍历d盘下面所有文件(排除掉文件夹)

    2024年02月05日
    浏览(161)
  • python-文件与异常处理try-except、finally

    文件和异常处理在文件操作中是非常重要的,它可以帮助我们处理文件不存在或权限问题等异常情况。以下是关于文件和异常处理的全面讲解以及相应的代码示例: 1. 文件不存在和权限问题的异常处理: 文件不存在时,打开文件时会抛出 FileNotFoundError 异常。 权限问题包括无

    2024年02月09日
    浏览(33)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包