Python学习----第十章--文件和异常及json

2023-11-20

1.读取文件

lstrip()删除左边空白符。rstrip()删除右边空白符。strip()删除两端空白符。

# #window 读取文件可以用\,但是在字符串中\是被当作转义字符来使用,经过转义之后可能就找不到路径的资源了,
# 例如\t会转义为tab键,,,,这里有两种方法:
# 一:更换为绝对路径的写法
# func1("C:\\Users\\renyc")
# 二:显式声明字符串不用转义(加r)
# func1(r"C:\Users\renyc")这里使用r来告诉

file_path='C:\\Users\\Blessing Lee\\Desktop\\pi.txt'     #绝对路径
#file_path=r'C:\Users\Blessing Lee\Desktop\pi.txt'       #加r声明

with open(file_path) as file_object:     #open打开文件并返回一个表示文件的pi.txt文件对象,
    message=file_object.read()           #Python将这个对象存储在后面的变量file_object中
    print(message)                       #有了文件的对象后,read读取它并把它作为长字符串存储在变量message中

----------------------------------------------------------------
#如果文件是在该代码同一目录下,则可使用:
with open('pi.txt') as file_object:

----------------------------------------------------------------
#相比于原始文件,read()输出会在末尾多一个空行,因为read()到达文件末尾时返回一个空字符串,而将这
#个字符串显示出来就是一个空行。
#删除空行可在print()中使用rstrip()方法:

print(message.rstrip())          #使用rstrip()删除多余空行

2.访问文件中每一行的内容

file_path='C:\\Users\\Blessing Lee\\Desktop\\pi.txt'     #绝对路径
#file_path=r'C:\Users\Blessing Lee\Desktop\pi.txt'       #加r声明
with open(file_path) as file_object:
    for line in file_object:          #通过文件对象执行循环遍历文件中的每一行
        print(line)
#>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
pi=3.1415926
                      #发现输出会多很多空行,因为在这个文件中每行末尾都有一个换行符,而print语句也会加上一个换行符,                    
535                   #因此末尾两个换行符:一个人来自文件,一个来自print
----------------------------------------------------
#可使用strip()来消除换行,例如:print(line.strip())

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

使用with时,open()返回的文件对象只在with代码块内可用。如果要在with代码块外访问这些文件的内容时,可在with代码块内将文件各行存储在一个列表中。例如:

file_path=r'C:\Users\Blessing Lee\Desktop\pi.txt'       #加r声明
with open(file_path) as file_object:                    #一模一样,前面都不需要变
       lines=file_object.readlines()    #使用Readlines()从文件中读取每一行并将其存储在一个列表中,该列表存储到变量lines中
for line in lines:                      #在with代码块外循环遍历lines,访问文件中的内容
    print(line.strip())
#>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
pi=3.1415926
535

4.使用文件中的内容

file_path=r'C:\Users\Blessing Lee\Desktop\pi.txt'       #加r声明
with open(file_path) as file_object:                    #这里从来就没变过
       lines=file_object.readlines()                    #逐行读取文件内容并将其以列表方式存储在lines中
pi_string=''                                            #设置pi为一个空字符串先
for line in lines:
    pi_string+=line.strip()                             #pi=pi加遍历后去空格的文件内容
print(pi_string)
#>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
pi=3.1415926535                                         #去掉换行后生成这样咯

#如果你的文件够大,或者你只想显示部分可以使用切片,例如print(pi_string[:5])显示前5位结果为:pi=3.141

#此时生成的pi依旧是字符串,因为Python读取所有文本都解读为字符串,如果你要将其用作数值,
#可使用int()转换为整数,或者使用float()转换为浮点数

5.replace()方法,将字符串中特定的单词替换为另一个单词

message="I really like dogs."
print(message.replace('dog','cat'))
#>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
I really like cats.            #简直黑科技啊,不仅能将dogs变成cats,就连没有加s的都能给你变了
                               #它检测到你想要变的字符就和你输入字符一样的全给替换

print(message.replace('do','cat'))
#>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
I really like catg.           #这里就是将cat与do替换了而已

6.写入文件

使用'w'模式时千万小心,如果你写入的文件不存在,open()函数会自动给你创建它,但是要是有这个文件的话,Python将在返回文件对象前清空该文件。尼玛,里面原来的内容全给你删了

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

file_path=r'C:\Users\Blessing Lee\Desktop\pi.txt'       #加r声明
with open(file_path,'w') as file_object:    #open()中两个实参,file_path文件路肩的对象,‘w’告诉python以写入模式打开这个文件
    file_object.write("i love dog!"

#结果:我的pi.txt文件中只剩下一句 i love dog!    ,之前的文件内容全没了
---------------------------------------------------------------------
    file_object.write("i love cat!")        #写入多行如果不换行的话内容挤在一起的
#结果:i love dog!i love cat!                #可使用\n,例如:file_object.write("i love dog!\n")

7.附加到文件

打开文件时可指定读取模式(‘r’)、写入模式(‘w’)、附加模式(‘a’)以及能够读取和写入的模式(‘r+’),如果省略这个参数的话python将以默认的只读模式打开文件。

如果想给文件添加内容而不是想‘w’模式那样覆盖原有的内容,可采用附加模式。它会将你写的内容添加到文件内容的末尾。

如果文件不存在,它也是会给你创建一个文件的。

file_path=r'C:\Users\Blessing Lee\Desktop\pi.txt'       #加r声明
with open(file_path,'a') as file_object:
    file_object.write("\nthis is my add contents!!!!")
    file_object.write("\n中午了外卖还不到,快要饿死了!!")

#文件中内容>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
i love dog!i love cat!
this is my add contents!!!!
中午了外卖还不到,快要饿死了!!

8.异常处理:使用try--except代码块处理异常

使用try--except代码块让Python在执行指定的操作,同时告诉Python遇到异常时该怎么做。使用try--except代码块时即使出现异常程序也将继续运行,显示你编写的友好错误提示或者执行你编写的发生错误时的代码。

#处理ZeroDivisionError异常(分母不能为0)
try:
    print(5/0)
except ZeroDivisionError:             #当出现ZeroDivisionError就执行except下的语句
    print("分母不能为0")               #这里告诉Python当程序遇到错误时输出提示分母不能为0
#>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
分母不能为0

-----------------------------------------------
#处理FileNotFoundError异常(文件找不到)
filename='test.txt'
try:
    with open(filename) as flie_job:
        message=file_job.read()
except FileNotFoundError:
    mes="文件"+filename+"找不到!"
    print(mes)
#>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
文件test.txt找不到!

9.else代码块

通常将可能发生错误的代码放到try--except中,而其它依赖于try代码块成功执行的代码都应该放入else代码块中,例如:

print("输入两个数字我将对它们进行除法运算!\n")
while True:
    fist_num=input("请输入除数:")
    second_num=input("请输入被除数:")
    try:
        anser=int(fist_num)/int(second_num)      #可能出现错误的代码放入try代码块中
    except ZeroDivisionError:                    #except代码块对遇到错误时执行应对措施
        print("分母不能为0")
    else:                                        #如果以上代码都没问题那就正常执行else块
        print(str(fist_num)+"/"+str(second_num)+"="+str(anser))
#>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
输入两个数字我将对它们进行除法运算!

请输入除数:5
请输入被除数:2       
5/2=2.5          #当输入的都没问题时,执行else代码块
请输入除数:5
请输入被除数:0          
分母不能为0       #当输入分母为0时,程序遇到错误,执行except下的代码块
请输入除数:

10.失败时不报错,可以在except代码块下执行pass,使程序在遇到该错误时什么都不做,继续执行其他不会报错的代码

#就直接在except代码下写pass,例如文件找不到错误:
try:
    .......
except FileNotFoundError:
    pass
else:
    .......

11.split()方法,它根据一个字符串创建一个单词列表。然而,它只能分割单词,并不能将一中文分成单个的字存储,例如:

#split()方法的使用:       
mes_e="i want rich!"                              #英文
print(mes_e.split())
mes_c="我想有钱!你连中文都不能分割。你有用吗?"        #中文
print(mes_c.split())
#>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
['i', 'want', 'rich!']     #英文的列表里就分成了三个单词
['我想有钱!你连中文都不能分割。你有用吗?']     #中文的还是将一句话分成一个列表元素

12.json存储数据,使用json.dump()和json.load()

#1.使用json.dump()来存储数字列表:
import json                 #导入json模块
numbers=[1,2,3,4,5]         #创建一个数字列表
filename='numbers.json'     
with open(filename,'w')as fil_job:   #open写模式
    json.dump(numbers,fil_job)       #使用json.dump()将numbers写入fil_job指向的文件中
#文件中内容>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
[1,2,3,4,5]

-------------------------------------------------------------------------------------------
#使用json.load()将这个列表读取到内存:
import json
filename='numbers.json'
with open(filename) as fil_job:
    numbers=json.load(fil_job)
print(numbers)
#>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
[1,2,3,4,5]

案例:如果一切存储了用户名,就加载它,否则提示用户输入用户名

import json
#如果之前存储过用户,就加载它,否则提示用户输入并存储
filename='username.json'
try:
    with open(filename) as fil_job:
        username=json.load(fil_job)
except FileNotFoundError:
    username=input("what is your name?")
    with open(filename,'w') as fil_job:
        json.dump(username,fil_job)
        print("i will remember you"+username)
else:
    print("welcome back,"+username)

13.重构

将代码划分一系列完成具体工作的函数。重构让代码更清晰、更易于理解、更容易扩展。

 

 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Python学习----第十章--文件和异常及json 的相关文章

  • Python 中的字节数组

    如何在 Python 中表示字节数组 如 Java 中的 byte 我需要用 gevent 通过网络发送它 byte key 0x13 0x00 0x00 0x00 0x08 0x00 在Python 3中 我们使用bytes对象 也称为s
  • 如何将base64字符串直接解码为二进制音频格式

    音频文件通过 API 发送给我们 该文件是 Base64 编码的 PCM 格式 我需要将其转换为 PCM 然后再转换为 WAV 进行处理 我能够使用以下代码解码 gt 保存到 pcm gt 从 pcm 读取 gt 保存为 wav decod
  • xlrd.biffh.XLRDError:Excel xlsx 文件;不支持[重复]

    这个问题在这里已经有答案了 我正在尝试使用读取启用宏的 Excel 工作表pandas read excel与 xlrd 库 它在本地运行良好 但是当我尝试将其推送到 PCF 时 我收到此错误 2020 12 11T21 09 53 441
  • 希伯来语中的稀疏句子标记化错误

    尝试对希伯来语使用稀疏句子标记 import spacy nlp spacy load he doc nlp text sents list doc sents I get Warning no model found for he Onl
  • 将 numpy 数组写入文本文件的速度

    我需要将一个非常 高 的两列数组写入文本文件 而且速度非常慢 我发现如果我将数组改造成更宽的数组 写入速度会快得多 例如 import time import numpy as np dataMat1 np random rand 1000
  • TF map_fn 或 while_loop 用于不同形状的张量列表

    我想处理不同形状的张量序列 列表 并输出另一个张量列表 考虑每个时间戳上具有不同隐藏状态大小的 RNN 就像是 输入 tf ones 1 2 2 tf ones 2 2 3 tf ones 3 2 1 输出 tf zeros 1 2 4 t
  • Tweepy StreamListener 到 CSV

    我是 python 新手 我正在尝试开发一个应用程序 使用 Tweepy 和 Streaming API 从 Twitter 检索数据并将数据转换为 CSV 文件 问题是此代码不会创建输出 CSV 文件 也许是因为我应该将代码设置为在实现例
  • 如何在 PyCharm 4.5.2 中使用 PyPy 作为标准/默认解释器?

    如何在 PyCharm 4 5 2 中使用 PyPy 作为标准 默认解释器 一切都在 Ubunutu 14 10 下运行 并且 pypy 已经安装 您可以在项目的设置下进行配置 这个官方文档直接涵盖了 https www jetbrains
  • 了解 Python 中的酸洗

    我最近接到一项作业 需要以腌制形式放置一本字典 其中每个键引用一个列表 唯一的问题是我不知道腌制形式是什么 谁能给我指出一些好的资源的正确方向来帮助我学习这个概念 pickle 模块实现了一个基本但强大的算法 用于序列化和反序列化 Pyth
  • 根据开始列和结束列扩展数据框(速度)

    我有一个pandas DataFrame含有start and end列 加上几个附加列 我想将此数据框扩展为一个时间序列 从start值并结束于end值 但复制我的其他专栏 到目前为止 我想出了以下内容 import pandas as
  • numpy 使用 datetime64 进行数字化

    我似乎无法让 numpy digitize 与 datetime64 一起使用 date bins np array np datetime64 datetime datetime 2014 n 1 s for n in range 1 1
  • 更改 python tkinter canvas 中的线坐标

    我画了一条线tkinter Canvas现在我想移动一端 这可能吗 例如和itemconfig import tkinter tk tkinter Tk canvas tkinter Canvas tk canvas pack line c
  • 使用 scipy curve_fit 拟合噪声指数的建议?

    我正在尝试拟合通常按以下方式建模的数据 def fit eq x a b c d e return a 1 np exp x b c np exp x d e x np arange 0 100 0 001 y fit eq x 1 1 1
  • Python多处理错误“ForkAwareLocal”对象没有属性“连接”

    下面是我的代码 我面临着多处理问题 我看到这个问题之前已经被问过 我已经尝试过这些解决方案 但它似乎不起作用 有人可以帮我吗 from multiprocessing import Pool Manager Class X def init
  • django-admin.py makemessages 不起作用

    我正在尝试翻译一个字符串 load i18n trans Well Hello there how are you to Hola amigo que tal 我的 settings py 文件有这样的内容 LOCALE PATHS os
  • 乘以行并按单元格值附加到数据框

    考虑以下数据框 df pd DataFrame X a b c d Y a b d e Z a b c d 1 2 1 3 df 我想在 列中附加数字大于 1 的行 并在该行中的数字减 1 df 最好应该 然后看起来像这样 或者它可能看起来
  • Python 声音(“铃声”)

    我想让一个 python 程序在完成任务时通过发出嘟嘟声来提醒我 目前 我使用import os然后使用命令行语音程序说 进程完成 我更愿意它是一个简单的 铃 我知道有一个函数可以用于Cocoa apps NSBeep 但我认为这与此没有太
  • 检测 IDLE 的存在/如何判断 __file__ 是否未设置

    我有一个脚本需要使用 file 所以我了解到 IDLE 没有设置这个 有没有办法从我的脚本中检测到 IDLE 的存在 if file not in globals file is not set 如果你想做一些特别的事情 file 未设置
  • 如何在 robobrowser-python 中发出 POST 请求

    http robobrowser readthedocs org en latest api html http robobrowser readthedocs org en latest api html 我正在尝试使用 APIbrows
  • 如何在单元测试中使用 JSON 发送请求

    我的 Flask 应用程序中有在请求中使用 JSON 的代码 我可以像这样获取 JSON 对象 Request request get json 这一直工作得很好 但是我正在尝试使用 Python 的 unittest 模块创建单元测试 但

随机推荐

  • IOS presentViewController没办法全屏的问题

    需要弹出的视图控制器的属性设置为0即可 mImagePick modalPresentationStyle 0
  • sklearn包MLPClassifier的使用详解+例子

    MLPClassifier 参数说明 hidden layer sizes 元组形式 长度n layers 2 默认 100 第i元素表示第i个神经元的个数 activation identity logistic tanh relu 默认
  • Vue3中的pinia使用(收藏版)

    1 pinia介绍 个人网站 紫陌 笔记分享网 想寻找共同学习交流 共同成长的伙伴 请点击 前端学习交流群 pinia 是 Vue 的存储库 它允许您跨组件 页面共享状态 就是和vuex一样的实现数据共享 依据Pinia官方文档 Pinia
  • 【Python】Python 模式匹配与正则表达式

    Python 模式匹配与正则表达式 1 模式匹配与正则表达式 你可能熟悉文本查找 即按下Ctrl F 输入你要查找的词 正则表达式 更进一步 它们让你指定要查找的 模式 你也许不知道一家公司的准确电话号码 但如果你住在美国或加拿大 你就知道
  • 21,verilog之宏define介绍

    注 学习 交流就在博主的个人weixin公众号 FPGA动力联盟 留言或直接 博主weixin fpga start 私信 宏define提供用一个相对简单的文字来表示一大段真正有意义的文字作用 换句话说 就是综合软件见到定义的宏 就用这个
  • uni-app页面点击tab左右滑动(swiper)

    uni app基于
  • 自动化测试工具——selenium 用前须知

    OK 经过上的过程 我相信你一定做出的相应的选择 如果你选择的是selenium 工具 那么接着往下阅读 首选你在开始selenium之前 需要花一到两个月时间去学一门语言 这里是根据没有语言基础的同学而定的 我推荐ruby python
  • swing重定向输出到jtextArea

    import java awt Font import java io IOException import java io OutputStream import java io PrintStream import javax swin
  • Android Studio 中模拟器无法打开,提示Error launching emulator

    一 遇到的问题 运行模拟器时 提示 Error launching emulator 二 解决方法 打开SDK Manager 点击取消Android Emulator 然后重新运行 会提示下载一些文件 按着操作即可 如果没问题就不需要取消
  • 深入解析String intern()

    在 JAVA 语言中有8中基本类型和一种比较特殊的类型String 这些类型为了使他们在运行过程中速度更快 更节省内存 都提供了一种常量池的概念 常量池就类似一个JAVA系统级别提供的缓存 8种基本类型的常量池都是系统协调的 String类
  • Python3.8安装tensorflow

    我现在的版本是3 8 8 64 bit 编辑器是Visual Studio Code 之前试过好多次都失败了 都是因为Python的版本和tensorflow版本的各种问题 后来下过anaconda 用不习惯 还是回来捯饬Visual St
  • onenote导入html文件,office js - OneNote Add in: Getting HTML content - Stack Overflow

    In the example code is provided to get RichText It is able to get the plain text content of the page but I cannot seem t
  • css之id选择器和class类选择器

    一 css基础 css定义 可以设置网页中的样式 外观 美化 css中文名字 级联样式表 层叠样式表 样式表 二 css基础语法 1 style标签写在title标签后面 2 选择器 属性名1 属性值1 属性名2 属性值2 color 代表
  • leetcode第8场双周赛

    这次双周赛有意外 第二第三题按照提示返回int 会报错 要返回List 第一题 给你一个字符串 S 返回只含 单一字母 的子串个数 示例 1 输入 aaaba 输出 8 解释 只含单一字母的子串分别是 aaa aa a b aaa 出现 1
  • axios和Ajax

    Ajax 由客户端请求ajax引擎 再由ajax引擎请求服务器 服务器作出一系列响应之后返回给ajax引擎 由ajax引擎决定将这个结果写入到客户端的什么位置 实现页面无刷新更新数据 创建Ajax步骤 1 创建异步对象 2 设置回调函数 U
  • 在ubuntu18.04上搭建的海思Hi3516EV200的编译环境

    准备工作 下载交叉编译工具 百度网盘 https pan baidu com s 1AL3EztPUpWZOpxdbyEnI w 提取码 w2k7 ubuntu版本 uname v 55 18 04 1 Ubuntu SMP Mon Jun
  • matlab 计算点云中值

    目录 一 概述 1 算法概述 2 主要函数 二 代码示例 三 结果展示 四 参数解析 输入参数 输出参数 五 参考链接 本文由CSDN点云侠原创 原文链接 如果你不是在点云侠的博客中看到该文章 那么此处便是不要脸的爬虫 一 概述
  • Git的使用(gitbash命令创建版本库)

    1 git的安装 msysgit gitbash 2 创建repository 路径名不要含有中文 pwd 查看当前路径 cd mkdir gitLearn 创建目录 cd gitLearn 进入路径 git INIT 初始化 编程git可
  • 如何替换对象的key值

    发生的场景 现在用antd组件库 有些组件想渲染数据的话 我要根据他们官网给的字段名称对应起来才能渲染上去 这个是复选框选中 保存的时候 字段需要按照后台约定的传入code value 1 常规循环遍历 大招来了 哈哈哈 才疏学浅 我觉得是
  • Python学习----第十章--文件和异常及json

    1 读取文件 lstrip 删除左边空白符 rstrip 删除右边空白符 strip 删除两端空白符 window 读取文件可以用 但是在字符串中 是被当作转义字符来使用 经过转义之后可能就找不到路径的资源了 例如 t会转义为tab键 这里