IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> Python知识库 -> 初识Python必看基础知识~ 续(6)九层之台,起于垒土,肝肝肝~ -> 正文阅读

[Python知识库]初识Python必看基础知识~ 续(6)九层之台,起于垒土,肝肝肝~


欢迎来到~ 初识Python 系列文章 “第六回”,大家好呀~ 我是 清汉

截至到前五篇文章,Python 的基础语法己基本叙述完毕。

预计还有两篇文章(算上这篇) Python 基础部分的知识就总结叙述完毕了。

基础部分结束后,计划会将本书第二部分的项目实战部分也一一列举出来~

  • 游戏:外星人入侵
  • 数据可视化
  • Web 应用

啊~ 我真是个勤勤恳恳的搬运工,哈哈~

不过,可能,应该,后面应该没有太多时间更新了,也可能会更新 Java方面的知识,因为… …

我要去培训班学 Java了~

当然,Python 我也不会拉下,会慢慢的自己啃下来,毕竟多掌握一份技能就多一份机会嘛~

人生苦短,我学Python~


好了,进入下面进入正文

接上回书~

上码🐎,走着~

在这里插入图片描述


DIY 6

声明:未打广告,全文知识梳理来源于《Python编程 从入门到实践(第2版)》豆瓣评分9.3

注:例中所有 >>> 符号后为输出结果

- -snip- - 为代码省略位置



知识框图

关于整个python基础的知识脑图


第10章

文件和异常


在这里插入图片描述


文件

  • 文本文件可以存储大量的数据,比如电子书籍、测绘数据、经济数据等等… 当我们需要分析或者修改、使用其中的数据时,便需要学会如何对这些数据进行CRUD;
  • 下面我们通过几个栗子来了解其中的奥秘 ~

在这里插入图片描述


读取文件

例1

  • 使用程序读取文件时,会用到一些关键字、函数、方法。下面我们通过“栗子”依次介绍该如何使用这些关键字、函数、方法来做到我们需要的效果。
  • 关键字 with 作用是Python 会在不再需要访问文件后将其关闭。
  • 函数 open() 打开文件,接受一个参数:要打开文件的名称;下例中的这种直接指定文件名称的一定要跟主程序在同一个目录中。
  • 方法 .read() 读取这个文件的全部内容,并将其作为一个字符串赋给变量。且读取到文件末尾时返回一个空字符串,当在控制台打印出来时就是一个空行。所以需采用方法rstrip()
  • 方法rstrip() 删除字符串尾部空白
	# 例 1
# 读取文件

with open('pi_digits.txt') as file_object: # open() 返回一个表示目标文件的对象并赋给file_object供以后使用
    contents = file_object.read()  # 将读取到的文件内容以字符串的形式赋值给变量 contents
print(contents.rstrip()) # 打印文件内容,使用rstrip()删除尾部空白

# >>> 3.1415926535
# >>>   8979323846
# >>>   2643383279

读取的文件:
这是我们的txt文件内容


文件路径

例 2

  • 文件路径分为相对路径绝对路径,在读取文件时正确的路径才能找到我们需要读取的文件,错误的格式、错误的写法都会导致Python找不到文件。下面的例子中将介绍两种不同路径的如何读取到文件;
	# 例 2
# 文件路径
#相对路径 
with open('text_files/filename.txt') as file_object: 
# 这样直接书写文件夹/文件名的格式,文件需存储在当前.py文件目录的子文件下
    contents = file_object.read()
    print(contents.rstrip())
# >>> Hello worde!

#绝对路径
file_path = 'E:/Python/Python-Crash-Course/python0_1/0__1/第一部分/第10章/随笔/text_files/filename.txt'
# >>> 文件路径名过长的话可以将其赋值给一个变量,后面可以直接读取这个变量来调用文件。
# >>> 绝对路径就需要从盘符到具体文件一层层书写下来,不管主程序是否在文件目录中都可以读取到文件。
with open(file_path) as file_object:
    contents = file_object.read()
    print(contents.rstrip())
# >>> Hello worde!

在这里插入图片描述


逐行读取

例 3

  • 当需要对文件进行逐行读取时,可采用for循环遍历文件。
  • 由于使用关键字 with 时,open() 返回的文件对象只能在 with 代码块内使用,若是在 with 代码块外使用可将其内容存储到一个列表中,再通过遍历列表即可得到文件内容。
	# 例 3
# 逐行读取
filename = 'pi_digits.txt'

with open(filename) as file_object:
    for line in file_object:
        print(line.rstrip()) # 消除尾部空白
# >>> 3.1415926535
# >>>   8979323846
# >>>   2643383279

# 创建一个包含文件各行内容的列表
filename = 'pi_digits.txt'

with open(filename) as file_object:
    lines = file_object.readlines() 
    # 方法 .readlines()从文件中读取每一行,并将其存储在一个列表中。列表赋给变量

for line in lines:
    print(line.rstrip())
# >>> 3.1415926535
# >>>   8979323846
# >>>   2643383279

使用文件的内容

例 4

  • 之所以要读取文件自然是这个文件对我们有用,比如我们要使用文件中的数据作为程序中某个部分的输出。
  • 如下例所示:
	# 例 4
# 使用文件内容
filename = 'pi_digits.txt'

with open(filename) as file_object:
    lines = file_object.readlines()
    # 方法 .readlines()从文件中读取每一行,并将其存储在一个列表中。列表赋给变量

pi_string = '' # 作为圆周率的值
for line in lines: # 遍历列表
    pi_string += line.strip() 
    # 将每行字符都加入到 pi_string 变量中,所有行相加就成了一串字符,圆周率
    # strip()消除字符串两头的空白,因为我们每行字符首尾都存在空格所以需要消除掉。

print(pi_string)
# >>> 3.141592653589793238462643383279
print(len(pi_string)) # 统计共有多少个字符
# >>> 32
print(f'{pi_string[:10]} ...') # 若是文件字符太多,又不需要全部显示,可使用切片显示部分数字
# >>> 3.14159265 ...

写入文件

例 5

  • open() 第一个实参也是要打开的文件名称。如果写入的文件不存在,函数open()会自动创建这个文件。
  • open() 第二个实参‘w’告诉 Python ,要以 写入模式 打开这个文件。
  • 打开文件时可指定:读取模式‘r’, 写入模式‘w’(python将在返回文件对象前清空文件内容), 附加模式‘a’, 读写模式‘r+’
  • 如果省略了模式实参,Python将以默认的只读模式打开文件。
  • 方法 .write() 将一个字符串写入到文件中。
	# 例 5-1
# 写入空文件
filename = 'programming.txt'

with open(filename, 'w') as file_object:
    # 方法 .write() 将一个字符串写入到文件中。
    file_object.write("I love programming.") 
    # Python只能将字符串写入文本,数值需要用str()将其转换为字符串格式。
    file_object.write("\nI love creating new games.\n") 
    # 函数write()不会在写入文本末尾添加换行符,因此需要自己指定换行符。
    

写入后的文件:
在这里插入图片描述


	# 例 5-2
# 附加到文件

filename = 'programming.txt'

# 附加模式,将要写入文件的行附加到文件末尾。
with open(filename, 'a') as file_object:
    file_object.write("I also love finding meaning in large datasets.\n")
    file_object.write("I love creating apps that can run in a browser.\n")

将需要写入的内容附加到原文件后:
在这里插入图片描述


异常

  • 编写代码中若有语法错误,在运行代码的时候程序将会停止并提示 Traceback,其中会包含有关异常的报告。
  • 使用 try-except 代码块处理异常, try-except 代码块让 Python 执行指定的操作,同时告诉 Python 出现异常时该怎么办。即使出现异常,程序也将继续运行,并显示你自己编写的提示信息,而不是 Traceback;

使用 try-except 代码块

例 6

  • 当你认为可能会发生错误时,可编写一个try-except代码块来处理可能引发的异常。
  • 如除法运算若除数为 0 ,则会提示异常为:ZeroDivisionError;例6 中便是以 ZeroDivisionError 作为 except 代码块的异常条件,若 try 代码块中的代码触发了这个异常便会直接运行 except 代码块中的内容。
	# 例 6
# 使用try-except代码块

try:
    # 错误代码,因为除数不能为 0
    print(5/0)

#当错误代码是此异常时,运行except代码块中的代码
except ZeroDivisionError:
        print("You can't divide by zero!")
# >>> You can't divide by zero!

使用异常避免崩溃

例 7

  • 比如发生错误时,还有程序的工作尚未完成,这时妥善的处理错误就尤为重要了。
	# 例 7
# 使用异常避免崩溃


# 提示需要用户输入的信息 #
#	 输入 q 结束程序 	#
print("Give me two numbers, and I'll divide them.")
print("Enter 'q' to quit.")

# 使用while循环保证可持续获取用户输入 #
#   并判断如果用户输入 q 就跳出循环   #
while True:
    first_number = input("\nFirst number: ")
    if first_number == 'q':
        break

    second_numbers = input("Second number: ")
    if second_numbers == 'q':
        break

    #将可能导致错误的代码放入try模块
    try:
        answer = int(first_number) / int(second_numbers)
        
    #出现错误运行except代码块的代码
    except ZeroDivisionError:
        print("You can't divide by 0!")
    #如果未出现错误则运行else代码块
    else:
        print(answer)

代码运行结果:
在这里插入图片描述


异常 + 分析文本

例 8

  • 读取文件结合异常处理对文件进行分析。合理的使用上述的 try-except 代码块,实际运用到我们日常代码编写中。
  • FileNotFoundError 异常的意思是找不到目标文件。
	# 例 8
# 处理FileNotFoundError

# 文本文件的绝对路径赋值给filename变量 #
       # 以供后续代码使用 #
filename = 'E:/Python/Python-Crash-Course/python0_1/0__1/第一部分/第10章/chapter_10/alice.txt'

try:
    with open(filename, encoding='utf-8') as f: 
# encoding指定值,在系统默认编码与读取文件编码不一致时要指定编码格式。#
        contents = f.read()

#当找不到该文件时运行except模块代码 #
except FileNotFoundError:
    print(f"Sorry, the file {filename} does not exist.")

else:
    # 计算文件大致包含多少个单词。#
    words = contents.split() 
# 方法 .split() 以空格为分隔符将字符串拆分成多个部分,并将这些部分存储到一个列表中。
    num_words = len(words) # 返回列表元素的个数
    print(f"The file {filename} has about {num_words} words.")

# >>> The file E:/Python/Python-Crash-Course/python0_1/0__1/第一部分/第10章/chapter_10/alice.txt has about 29465 words.

方法 .split() 具体实例:

# 方法 .split()
# 以空格为分隔符将字符串拆分成多个部分,并将这些部分存储到一个列表中
title = "Alice in wonderland"
list_title = title.split()
print(list_title)

# >>> ['Alice', 'in', 'wonderland']

静默失败

例 9

  • 有时候当发生异常时并不需要提示什么,我们需要程序保持沉默就像没有发生什么一样接着跑下去。
  • pass 语句便可以帮忙实现这种功能,在 try-except 代码块的 except 中直接放入 pass 语句即可。
  • 有了 pass 语句,我们就可以决定报告哪些错误了, 嘿嘿~
  • 这里就不举具体实例了,有兴趣可以自己敲一下,看看运行效果。
	# 例 9
# 这是一串伪代码 #

try:
	# 需运行的代码
except FileNotFoundError:
	pass

存储数据

  • 程序中处理数据、收集信息所得到的数据,大多数时候都需要把它存储到文件中,以供下次使用或提供数据可视化。
  • 下面几个栗子便是要教会我们如何存储数据。

模块 json

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

例 10

  • json.dump() :存储
  • json.load() :读取到内存
	# 例 10
# 存储数据
#模块 json 将简单的Python数据结构转储到文件中
import json

numbers = [2, 3, 5, 7, 11, 13]

filename = 'number.json'

 # json.dump() 存储 #
with open(filename, 'w') as f:
    json.dump(numbers, f) 
    # 函数 json.dump() 有两个实参,要存储的数据及用于存储数据的文件对象。

 # json.load() 读取到内存 #
with open(filename) as f:
    numbers_open = json.load(f) 
    # 加载存储在文件number.json的信息,赋给变量

print(numbers_open)
# >>> [2, 3, 5, 7, 11, 13]

json 模块存储的数据:
在这里插入图片描述


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

例 11

  • 提示用户首次运行程序时输入自己的名字,并在再次运行程序时记住他。
	# 例 11
# 保存和读取用户生成数据

import json

# 如果以前存储了用户名,就加载它 #
# 否则,提示用户输入用户名并存储它 #

filename = 'username.json'

# try 代码块中若找不到这个json文件,便会跳转到 except代码块 #
		# 若是存在 json文件,跳转到else代码块 #
try:
    with open(filename) as f:
        username = json.load(f) # 将文件内容读取并赋值给 username变量
except FileNotFoundError:
	# 提示用户输入姓名 #
    username = input("What is your name?\nname: ")
	# 用户输入姓名后存储到json文件并向控制台打印用户输入姓名 #
    with open(filename, 'w') as f:
        json.dump(username, f)
        print(f"We'll remember you when you come back, {username}!")
else:
	# 打印用户姓名 #
    print(f"Welcome back, {username}!")

不存在json文件的情况:
在这里插入图片描述

存在josn文件的情况:
在这里插入图片描述


重构

例 12

  • 重构让代码更清晰、更容易扩展、更易于理解。
  • 重构需要保证程序能够正确的运行,合理的划分一系列的具体工作,可以分别打包成不同的函数。
# 重构

def get_stored_username():
    '''如果用户存储了用户名,就获取它'''

    filename = 'username.json'
    try:
        with open(filename) as f:
            username = json.load(f)
    except FileNotFoundError:
        return
    else:
        return username


def get_new_username():
    '''提示用户输入用户名'''

    username = input("What is your name?")
    filename = 'username.json'
    with open(filename, 'w') as f:
        json.dump(username, f)

    return username


def greet_user():
    '''问候用户,并指出其名字'''

    username = get_stored_username()
    if username:
        print(f"Welcome back, {username}!")
    else:
        username = get_new_username()
        print(f"We'll remember you come back, {username}!")

这里就不运行了,有兴趣的可以自己运行看看~

在这里插入图片描述


本篇小结

  • 学习了如何使用、读取、写入文件
  • 学习了如何处理异常
  • 学习了如何存储数据、使用数据
  • 学习了如何重构代码

这是一张描述学习的表情包


感谢,每一位认真阅读到这里的少侠!来个手滑三联吧,不迷路~

一张猫咪比心的表情包
关于一键三联的图片


下期见,等你哟~


在这里插入图片描述

  Python知识库 最新文章
Python中String模块
【Python】 14-CVS文件操作
python的panda库读写文件
使用Nordic的nrf52840实现蓝牙DFU过程
【Python学习记录】numpy数组用法整理
Python学习笔记
python字符串和列表
python如何从txt文件中解析出有效的数据
Python编程从入门到实践自学/3.1-3.2
python变量
上一篇文章      下一篇文章      查看所有文章
加:2021-08-05 17:18:30  更:2021-08-05 17:19:59 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年5日历 -2024/5/17 11:28:12-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码