Python中文件操作和异常处理

文章目录

  • 一、文件操作
    • 1.概念
    • 2.文件
    • 3.二进制
  • 二、基本文件操作
  • 三、乱码产生
  • 四、with open() as f
  • 五、代码实现文件复制粘贴
  • 六、try ... except ...
  • 七、代码比较


一、文件操作

1.概念

帮助我们把爬虫抓下来的数据,进行保存。

2.文件

在计算机中,没有pdf,word,txt,csv,image,video,music,excel概念,只有文件的概念。

一个成功的文件 = 成功的文件名 + 成功的文件内容,比如:

歌曲 = 告白气球.mp3 + 歌曲的数据
视频 = 告白气球.mp4 + 视频的数据
图片 = 告白气球.jpg + 图片的数据

3.二进制

在计算机中,所有的图片、视频、音乐都是用二进制数据存储的。

image,video,music 数据 == 二进制数据【binary】

二、基本文件操作

A、新建文件:用法如下

open(文件名, 操作方式[,])

B、操作文件:用法如下

read() or write()

C、保存退出:用法如下

close()

代码示例如下所示:

# 1.新建文件
f = open('Python.txt', 'w')

# 2.操作文件
f.write('hello')

# 3.保存退出
f.close()

说明:代码中的f是电脑内存中虚拟的文件,将内容写入后,通过close()方法把虚拟文件保存到本地

操作方式中的,常用的有三种:

  1. w:只能写字符串 ----> 会覆盖之前数据 ----> 要写encoding=‘utf-8’
  2. a/a+:只能写字符串 -----> 追加写入数据 ----> 要写encoding=‘utf-8’
  3. wb:写入二进制数据 -----> 用于保存图片、音乐、视频 ----> 不能写encoding=‘utf-8’

操作方式中的,有两种:

  1. r:读出来的是字符串 ----> 要写encoding=‘utf-8’
  2. rb:读出来的是二进制(几乎不用) ----> 不能写encoding=‘utf-8’

读字符串这里需要注意,分为两种读取方式:

A、一次性读取全部文件(用的不多):代码示例如下

f = open('古诗.txt', 'r', encoding='utf-8')
data = f.read()
f.close()
print(data)

B、一行一行读取文件(经常用):代码示例如下

f = open('古诗.txt', 'r', encoding='utf-8')
for line in f:
    print(line.strip())

三、乱码产生

如下代码,当写入中文内容时:

# 1.新建文件
f = open('Python.txt', 'w')

# 2.操作文件
f.write('我爱你')

# 3.保存退出
f.close()

运行代码会发现出现乱码,如下图:
在这里插入图片描述

这是因为编码和解码方式不同导致的,解决方案如下模版:

open(文件名, 操作方式, encoding='utf-8')

注意:encoding=‘utf-8’ 只针对字符串的读写操作。

代码示例如下所示:

# 1.新建文件
f = open('Python.txt', 'w', encoding='utf-8')

# 2.操作文件
f.write('我爱你')

# 3.保存退出
f.close()

四、with open() as f

上面我们创建文件到保存文件总公共使用了三步:

A、新建文件:open()
B、读写文件:read() or write()
C、关闭文件:close()

我们会发现很繁琐,需要写3行代码,可以将A和C进行合并,合并之后的代码是with open() as f,中间的B正常写,open()里面也是正常写,代码示例如下:

with open('古诗.txt', 'r', encoding='utf-8') as f:
    for line in f:
        print(line.strip())

五、代码实现文件复制粘贴

需求:实现03.py文本复制,思路如下:

  1. 先把03.py的文件内容读出来
  2. 再把03.py的内容写到新文件

具体代码如下:

# 读
with open('03.py', 'r', encoding='utf-8') as f:
    data = f.read()

# 写
with open('【新】03.py', 'a+', encoding='utf-8') as f:
    f.write(data)

print('文件复制完成')

六、try … except …

该语句是用来处理异常,可以理解为:

try ... except ...   
尝试 ... 期望 ...
尝试 执行xxxx代码 如果xxxx代码报错了 执行期望部分

代码示例如下所示:

# 1、导入请求库
import requests
# 2、准备网址
url = 'https://pic.netbian.com/uploads/allimg/220131/012219-1643563339f065.jpg'
# 3、发送请求
data = requests.get(url).content
# 4、保存
file_name = '小姐姐.jpg'
try:
    with open(file_name, 'wb') as f:
        f.write(data)
    print('下载完成: {}'.format(file_name))
except:
    print('下载失败: {}'.format(file_name))

七、代码比较

如下图所示两组代码:
在这里插入图片描述
在这里插入图片描述

两组代码功能上是一样的,但是一般在开发中用下面这组代码,更加美观,所以之后异常处理用下面的代码:

try:
    pass
except Exception as e:
    pass

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/639037.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

副业树洞聊天项目/树洞倾诉/陪陪系统源码/树洞源码下载搭建

随着社会的发展和人们生活水平的提高,越来越多的人在面临心理压力、情感困扰或生活困境时,需要一个可以宣泄、倾诉和寻求支持的平台。而传统的人际交往方式往往会遇到难以排解的问题,比如担心被他人知晓自己的隐私等,这就导致了人…

Java期末复习指南(1):知识点总结+思维导图,考试速成!

🔖面向对象 📖 Java作为面向对象的编程语言,我们首先必须要了解类和对象的概念,本章的所有内容和知识都是围绕类和对象展开的! ▐ 思维导图1 ▐ 类和对象的概念 • 简单来说,类就是对具有相同特征的一类事…

Leaflet【三】图层组 geoJson 热力图

图层组 LayerGroup 用于将几个图层分组并作为一个整体处理。如果你把它添加到地图上,任何从该组中添加或删除的图层也会在地图上添加/删除。 L.layerGroup([marker1, marker2]).addTo(map);使用图层组有什么好处呢?这个在后面有说到,这里的…

Unity射击游戏开发教程:(19)控制生命进度条

在这篇文章中,我们将讨论如何添加一个不是条形而是心形的生命条。这种方法不使用 UI 滑块,而是使用 UI 图像。 第一步是创建要填充的栏的轮廓。我使用 Aseprite 制作像素艺术,并慢慢地将我的太空射击游戏转变为经典的像素街机游戏。

网络安全、信息安全、数据安全的定义与区别

信息安全 信息安全是指信息的保密性、完整性、可用性和真实性的保持。从定义角度来说,信息安全没有严格标准定义,但从信息安全涉及的内容出发,信息安全确保信息存储或传输中的信息,不被他人有意或无意的窃取与破坏。这里的“信息”…

Leetcode刷题笔记3

18. 四数之和 18. 四数之和 - 力扣(LeetCode) 给你一个由 n 个整数组成的数组 nums ,和一个目标值 target 。请你找出并返回满足下述全部条件且不重复的四元组 [nums[a], nums[b], nums[c], nums[d]] (若两个四元组元素一一对应&…

vue期末复习选择题1

1. 下面哪一项描述是错误的?(B) A.$("ul li:gt(5):not(:last)")选取ul标记里面索引值大于5且不是最后一个的li元素B.$("div").find("span")选取div元素的子元素spanC.$("div.showmore > a")选取…

合约开发的基本结构剖析及前置知识梳理

前置知识点 上下文变量初步 合约函数的背后是transaction,上下文变量访问的是transaction中的信息两个上下文变量:tx和msg ERC20 规范代码实现Metamask测试 ganache-cli的安装 安装 npm install -g ganache-cli启动 ganache-cli如果出现以下这种…

本特利330103-03-09-10-02-00 PLC模块技术分析与应用探讨

本特利330103-03-09-10-02-00 PLC模块技术分析与应用探讨 一、引言 在工业自动化领域中,可编程逻辑控制器(PLC)作为核心控制设备,其性能的稳定性和可靠性直接关系到整个生产线的运行效率。本特利(Bentley)…

求第 N 个泰波那契数 | 动态规划

1.第 N 个泰波那契数 题目连接:1137. 第 N 个泰波那契数 泰波那契序列 Tn 定义如下: T0 0, T1 1, T2 1, 且在 n > 0 的条件下 Tn3 Tn Tn1 Tn2给你整数 n,请返回第 n 个泰波那契数 Tn 的值。 2.什么是动态规划 在解决这道问题之前…

获取日期区间的所有日期

借助moment.js 转换指定格式,首先安装npm install moment --save methods:{enumerateDaysBetweenDates(startDate, endDate) { // 假定你已经保证了startDate 小于endDate,且二者不相等let daysList [];let SDate this.$moment(startDate);let EDate …

计算机系统基础 8 循环程序

概要 两种实现方法——分支指令实现和专门的循环语句实现以及有关循环的优化。 分支指令实现 倒计数 …… MOV ECX,循环次数 LOOPA:…… …… DEC ECX JNE LOOPA 正计数 …… MOV ECX,0 LOOPA: …… INC ECX CMP …

U-Boot menu菜单分析

文章目录 前言目标环境背景U-Boot如何自动调起菜单U-Boot添加自定义命令实践 前言 在某个厂家的开发板中,在进入它的U-Boot后,会自动弹出一个菜单页面,输入对应的选项就会执行对应的功能。如SD卡镜像更新、显示设置等: 目标 本…

ESP8266实现获取天气情况

利用太极创客提供的ESP8266 心知天气库获取天气情况并显示 心知天气库地址: ESP8266-心知天气: 本库主要功能为使用ESP8266物联网开发板通过心知天气 API 获取天气等信息。 clone到本地: git clone https://gitee.com/taijichuangke/ESP8266-Seniverse.git 安装该…

go语言的一些常见踩坑问题

开始之前,介绍一下​最近很火的开源技术,低代码。 作为一种软件开发技术逐渐进入了人们的视角里,它利用自身独特的优势占领市场一角——让使用者可以通过可视化的方式,以更少的编码,更快速地构建和交付应用软件&#…

ArkUI-X开发指南:【SDK配置和构建说明】

ArkUI-X SDK配置和构建说明 ArkUI-X SDK是ArkUI-X开源项目的编译产物,可将ArkUI-X SDK集成到现有Android和iOS应用工程中,使开发者基于一套ArkTS主代码,就可以构建支持多平台的精美、高性能应用。SDK内容包含ArkUI跨平台运行时,组…

【高频】从输入URL到页面展示到底发生了什么?

一、相关衍生面试问题: 浏览器输入美团网站,从回车到浏览器展示经历了哪些过程 ? http输入网页之后的流程? 百度搜索页面,从点开搜索框,到显示搜索页面经历了什么? 二、探究各个过程&#x…

[Algorithm][回溯][记忆化搜索][最长递增子序列][猜数字大小Ⅱ][矩阵中的最长递增路径]详细讲解

目录 1.最长递增子序列1.题目链接2.算法原理详解3.代码实现 2.猜数字大小 II1.题目链接2.算法原理详解3.代码实现 3.矩阵中的最长递增路径1.题目链接2.算法原理详解3.代码实现 1.最长递增子序列 1.题目链接 最长递增子序列 2.算法原理详解 题目解析:从每个位置&am…

【BUG】Edge|联想电脑 Bing 搜索报错“Ref A: 乱码、 Ref B:乱码、Ref C: 日期” 的解决办法

文章目录 省流版前言解决办法 详细解释版前言问题描述与排查过程解决办法与总结 省流版 我原以为我解决了,才发的博客,晚上用了一下其他设备发现还是会出现这个问题… 这篇博客并未解决该问题,如果评论里有人解决了这个问题不胜感激&#x…

博客说明 5/12~5/24【个人】

博客说明 5/12~5/24【个人】 前言版权博客说明 5/12~5/24【个人】对比最后 前言 2024-5-24 13:39:23 对我在2024年5月12日到5月24日发布的博客做一下简要的说明 以下内容源自《【个人】》 仅供学习交流使用 版权 禁止其他平台发布时删除以下此话 本文首次发布于CSDN平台 作…