首页 > 编程语言 >Python文件与异常

Python文件与异常

时间:2022-12-26 20:05:33浏览次数:36  
标签:文件 Python 数据 except 字符串 异常


文章目录

  • ​​一. 文件的基础知识​​
  • ​​1. 文件与文件类型​​
  • ​​(1). 定义​​
  • ​​(2). 文件名的组成​​
  • ​​(3). 文件类型​​
  • ​​2. 目录与文件路径​​
  • ​​(1). 目录​​
  • ​​(2). 路径表示​​
  • ​​1. 绝对路径​​
  • ​​2. 相对路径​​
  • ​​二. 文件的操作​​
  • ​​1. 文件的打开和关闭​​
  • ​​(1). 文件的打开​​
  • ​​1. 定义​​
  • ​​2. 语法格式一​​
  • ​​3. 语法格式二​​
  • ​​(2). 文件的关闭​​
  • ​​1. 定义​​
  • ​​2. 语法格式​​
  • ​​2. 文件内容的读取​​
  • ​​(1). 用文件对象的read()方法读文件​​
  • ​​1. 定义​​
  • ​​2. 语法​​
  • ​​3. 举例​​
  • ​​(2). 用文件对象的readline()方法读文件​​
  • ​​1. 定义​​
  • ​​2. 语法​​
  • ​​3. 注意事项​​
  • ​​(3). 用文件对象的readlines()方法读文件​​
  • ​​1. 定义​​
  • ​​2. 语法​​
  • ​​3. 注意事项​​
  • ​​(4). 逐行读取​​
  • ​​1. 定义​​
  • ​​2. 举例​​
  • ​​(5). 语法总结​​
  • ​​(6). 文件的操作举例​​
  • ​​1. 遍历全文本:方式一​​
  • ​​2. 遍历全文本:方式二​​
  • ​​3. 逐行遍历文件:方法一​​
  • ​​4. 逐行遍历文件:方法二​​
  • ​​3. 数据的文件写入​​
  • ​​(1). 用文件对象的write()方法写文件​​
  • ​​1. 定义​​
  • ​​2. 语法​​
  • ​​3. 注意事项​​
  • ​​(2). 用文件对象的writelines()方法写文件​​
  • ​​1. 定义​​
  • ​​2. 语法​​
  • ​​3. 注意事项​​
  • ​​(3). 语法总结​​
  • ​​(4). 数据文件写入举例​​
  • ​​三. 实例:自动轨迹绘制​​
  • ​​1. 基本思路​​
  • ​​2. 数据接口定义​​
  • ​​3. 举例:​​
  • ​​四. 一维数据的格式化和处理​​
  • ​​1. 数据组织的维度​​
  • ​​(1). 从一个数据到一组数据​​
  • ​​(2). 维度:一组数据的组织形式​​
  • ​​(3). 数据的分类表示​​
  • ​​1. 一维数据​​
  • ​​2. 二维数据​​
  • ​​3. 多维数据​​
  • ​​4. 高维数据​​
  • ​​(4). 数据的操作周期​​
  • ​​2. 一维数据的表示​​
  • ​​(1). 如果数据间有序:使用列表类型​​
  • ​​(2). 如果数据间无序:使用集合类型​​
  • ​​3. 一维数据的存储​​
  • ​​(1). 存储方式一:空格分隔​​
  • ​​(2). 存储方式二:逗号分隔​​
  • ​​(3). 其他方式​​
  • ​​4. 一维数据的处理​​
  • ​​(1). 一维数据的读入处理​​
  • ​​(2). 一维数据的写入处理​​
  • ​​五. 二维数据的格式化和处理​​
  • ​​1. 二维数据的表示​​
  • ​​(1). 使用列表类型​​
  • ​​2. CSV数据存储格式​​
  • ​​(1). CSV(Comma-Separated Values, 由逗号分隔的值)​​
  • ​​(2). 举例​​
  • ​​(3). 约定​​
  • ​​3. 二维数据的存储​​
  • ​​4. 二维数据的处理​​
  • ​​(1). 二维数据的读入处理​​
  • ​​(2). 二维数据的写入处理​​
  • ​​(3). 二维数据的逐一处理​​
  • ​​六. 异常和异常处理​​
  • ​​1. 异常的定义​​
  • ​​2. 异常的处理​​
  • ​​1. 方式一​​
  • ​​2. 方式二​​
  • ​​3. 方式三​​
  • ​​3. 多异常处理​​
  • ​​4. 注意事项​​

一. 文件的基础知识

文件的使用可以大大简化代码并保证输入的正确性。而将文件用于输出时,其最大的优势在于可以将程序结构长期保存

1. 文件与文件类型

(1). 定义

文件是数据的抽象和集合

  • 文件是存储在辅助存储器上的数据序列
  • 文件是数据存储的一种形式
  • 文件的展现形态:文本文件和二进制文件
组成文件的数据可以是ASCII编码,也可以是二进制编码

本质上所有文件都是二进制形式存储

形式上所有文件采用两种方式展示

文件一定有一个文件名,文件名的长度和命名规则因不同的操作系统而异

(2). 文件名的组成

文件名 = 主文件名.扩展名

主文件名:由用户根据OS的命名规则自行命名,并且要与其他文件加以区别

扩展名:根据文件类型对应专属的缩写,指定打开、操作该文件的应用程序

注:文件都是按文件名访问的

一方面通过主文件名指明访问对象
另一方面通过扩展名指定访问和处理文件的应用程序

(3). 文件类型

文本文件:是纯文本,指只包含基本文本字符,由单一特定编码组成的文件

由于存在编码,文本文件也被看成是存储着的长字符串

最常见的文本文件是.txt文件
.py文件也是文本文件

二进制文件:除了文本文件之外的文件,直接由比特0和1组成,没有统一字符编码

一般存在由二进制0和1进行特定的组织结构,产生文件

如.doc文件,.xls文件,声音文件,图像文件(.png),.exe文件,视频文件(.avi)

不同的二进制文件需要借助不同的库进行不同的处理

Python文件与异常_Python

2. 目录与文件路径

(1). 目录

  • 文件是用来组织和管理一组相关数据的,而目录是用来组织和管理一组相关文件的
  • 目录又称为文件夹,可以包含文件,也可以包含其他目录

(2). 路径表示

文件保存的位置称为路径

1. 绝对路径

①定义:

指从文件所在驱动器(盘符)开始描述文件的保存位置。

举例:
E:\学习\Visual stdio code\Python作业\python的word作业\CTF.py

其中反斜杠\是盘符、目录、文件之间在WindowsOS下的分隔符。

②在Python程序中描述一个文件的路径方式

以下是在Windows平台表示形式

  1. 需要使用字符串
但是在字符串中,\是转义序列符,所有为了还原反斜杠分隔符的含义,使用两个\

如:"E:\\学习\\Visual stdio code\\Python作业\\python的word作业\\CTF.py"
  1. 使用r取消后续字符串中反斜杠的转义特性
    这样书写简便
举例:r "E:\学习\Visual stdio code\Python作业\python的word作业\CTF.py"
2. 相对路径

①定义

是指从当前工作目录开始扫描文件的保存位置

每个运行的程序都有一个当前工作目录,又称cwd。
一般来说当前工作目录默认为应用程序的安装目录
通过Python语言自带的os库函数重新设置cwd
>>>import os
>>>os.getcwd() #查看当前工作目录
'E:\\学习\\Visual stdio code\\Python作业\\python的word作业\\CTF.py'
>>>os.chdir('E:\\学习\\Visual stdio code\\Python作业') #修改当前工作目录
>>>os.getcwd()
'E:\\学习\\Visual stdio code\\Python作业'

②相对路径表示方法

相对路径中的盘符直到当前工作目录部分都缺省了,系统默认从当前工作目录开始根据路径描述定位文件

“…”表示当前目录的上一级目录

二. 文件的操作

通过绝对路径或相对路径找到文件,然后就是对文件进行操作,
文件操作的步骤:打开文件、读或写文件、关闭文件

1. 文件的打开和关闭

Python文件与异常_数据_02

(1). 文件的打开

1. 定义

大多数文件都是长期保存在外部存储器的,需要操作时必须从外存调入内存,才能由CPU进行处理。
而打开操作就是将文件从外部存储器调入内存的过程,这个过程需要使用Python内置的open命令,并生成一个File对象

注:Python程序中,文件一旦打开都会和一个文件对象相关联,随后的文件操作都通过调用file对象的方法实现

2. 语法格式一

文件对象名 = open(文件路径字符串,模式字符)

文件路径字符串可以采用:绝对路径、或相对路径
打开文件模式:指定打开文件类型和操作文件的方式

打开模式

文件类型

操作方式

文件不存在时

是否覆盖写

’r‘

文本文件

只可读文件

报错

-

’r+‘

可读可写

报错


’w‘

只可写文件

新建文件


’w+‘

可读可写

新建文件


’a‘

只可写文件

新建文件

否,从EOF处开始追加写

’a+‘

可读可写

新建文件

否,从EOF处开始追加写

’rb‘

二进制文件

只可读文件

报错

-

’rb+‘

可读可写

报错


’wb‘

只可写文件

新建文件


’wb+‘

可读可写

新建文件


’ab‘

只可写文件

新建文件

否,从EOF处开始追加写

’ab+‘

可读可写

新建文件

否,从EOF处开始追加写

Python文件与异常_数据_03


Python文件与异常_数据_04

3. 语法格式二
with open("文件路径字符串", "模式字符", encoding="编码类型") as 文件对象名:
文件操作语句

关键字with的功能是在不再需要访问文件后自动将文件关闭。

而open命令打开文件一定要通过调用close()方法进行关闭。

举例理解:

文件 test.txt 
Hello,world!
Hello,Python!
Hello,my brothers.

代码:
with open('test.txt') as file_object:
contents = file_object.read()
print(contents)

结果:
Hello,world!
Hello,Python!
Hello,my brothers.

解释一下:
函数open()中的参数'test.txt'就是要打开的文件。函数open()返回的是打开文件的对象,第一行代码就是把文本文件 test.txt 打开,并将其对象保存在file_object变量中。

(2). 文件的关闭

1. 定义

执行open命令打开文件之后,这个文件就被Python程序占用并调入内存,其后所有的读写操作都发生在内存,于此同时,其他任何程序都不能操作该文件

当读写操作结束后,必须将文件从内存保存到外存,这样做一方面将内存中文件的变化同步至外存,以便长期保存
也是为了释放Python程序对文件的占用,让其他应用程序能够操作文件

2. 语法格式

文件对象.close()

注:不允许对关闭的文件执行任何读写操作

2. 文件内容的读取

(1). 用文件对象的read()方法读文件

1. 定义

读出文件所有内容并作为一个字符串返回

2. 语法

字符串变量 = 文件对象.read()

3. 举例
score1.txt文件内容:
学号,平时成绩,期末成绩
9999180101,77,88
9999180102,91,85
9999180103,87,96
9999180104,70,68
9999180105,86,72

with open('score1.txt', 'r', encoding="utf-8") as file_object:
contents = file_object.read()
print(contents)

结果为:
学号,平时成绩,期末成绩
9999180101,77,88
9999180102,91,85
9999180103,87,96
9999180104,70,68
9999180105,86,72

(2). 用文件对象的readline()方法读文件

1. 定义

将读出文件中当前行,并以字符串的形式返回

2. 语法

字符串变量 = 文件对象.readline()

3. 注意事项

每调用一次该函数,读取文件的一行内容
如果文件包含多行内容,配合for循环使用

(3). 用文件对象的readlines()方法读文件

1. 定义

以列表的形式返回整个文件的内容,其中一行对应一个列表元素

2. 语法

列表变量 = 文件对象.readlines()

3. 注意事项

readlines()方法更简洁的方式按行读出整个文件内容,后续只要通过简单的列表遍历就可以取出任意行进行处理

(4). 逐行读取

1. 定义

将文本文件中的数据进行逐行读取

2. 举例
with open('test.txt') as file_object:
for line in file_object:
print(line)

结果:
Hello,world!

Hello,Python!

Hello,my brothers.
输出结果中每一行内容后面都多了一个空行,这时因为在文件中每一行的末尾都会有一个换行符,
而每条print()语句也会加上一个换行符,所以每行末尾都有两个换行符,所以输出之后就会多一个空行。

with open('test.txt') as file_object:
for line in file_object:
print(line.rstrip())
可以消除多于的空行

(5). 语法总结

Python文件与异常_python_05


Python文件与异常_字符串_06

(6). 文件的操作举例

1. 遍历全文本:方式一

Python文件与异常_数据_07

2. 遍历全文本:方式二

Python文件与异常_字符串_08

3. 逐行遍历文件:方法一

Python文件与异常_python_09

4. 逐行遍历文件:方法二

Python文件与异常_python_10

3. 数据的文件写入

(1). 用文件对象的write()方法写文件

1. 定义

write()方法将指定的字符串写入文件当前插入点位置

2. 语法

文件对象.wirte(写入字符串)

注:每次调用write()方法系统都会返回这次写入文件的字符数

3. 注意事项
  • 打开文件执行写入操作,连续的write()方法按照顺序依次写入字符串
  • 文件的write()方法将字符串参数原样写入文件,连续希尔不同字符串之间不会添加任何分隔符

(2). 用文件对象的writelines()方法写文件

1. 定义

writelines()方法可以以序列的形式接受多个字符串作为参数,一次性写入多个字符串

2. 语法

文件对象.writelines([“字符串序列1,字符串序列2”])

参数可以是:列表、集合、元组、字典,但元素一定要是字符串

3. 注意事项
  • 和write()方法一样都是字符串原样写入文件,不添加任何分隔符
  • 只有在列表参数的字符串末尾加上分隔符才行

(3). 语法总结

Python文件与异常_python_11


Python文件与异常_Python_12

(4). 数据文件写入举例

Python文件与异常_数据_13

需要移动指针,从最开始的位置向后遍历,才能输出文本内容

Python文件与异常_python_14

三. 实例:自动轨迹绘制

1. 基本思路

  • 步骤一:定义数据文件格式(接口)
  • 步骤二:编写程序,根据文件接口解析参数绘制图型
  • 步骤三:编制数据文件

2. 数据接口定义

Python文件与异常_python_15

3. 举例:

#AutoTraceDraw.py
import turtle as t
t.title('自动轨迹绘制')
t.setup(800, 600, 0, 0)
t.pencolor("red")
t.pensize(5)
#数据读取
datals = []
file = open("data.txt",'r')
for line in file:
line = line.replace("\n","")
if line !="":
datals.append(list(map(eval, line.split(','))))
file.close()
#自动绘制
for i in range(len(datals)):
t.pencolor(datals[i][3],datals[i][4],datals[i][5])
t.fd(datals[i][0])
if datals[i][1]:
t.rt(datals[i][2])
else:
t.lt(datals[i][2])


data.txt
300,0,144,1,0,0
300,0,144,0,1,0
300,0,144,0,0,1
300,0,144,1,1,0
300,0,108,0,1,1
184,0,72,1,0,1
184,0,72,0,0,0
184,0,72,0,0,0
184,0,72,0,0,0
184,1,72,1,0,1
184,1,72,0,0,0
184,1,72,0,0,0
184,1,72,0,0,0
184,1,72,0,0,0
184,1,720,0,0,0

Python文件与异常_Python_16

四. 一维数据的格式化和处理

1. 数据组织的维度

(1). 从一个数据到一组数据

Python文件与异常_python_17

(2). 维度:一组数据的组织形式

Python文件与异常_数据_18

(3). 数据的分类表示

1. 一维数据

Python文件与异常_python_19

2. 二维数据

Python文件与异常_python_20

3. 多维数据

Python文件与异常_数据_21

4. 高维数据

Python文件与异常_数据_22

(4). 数据的操作周期

Python文件与异常_数据_23

2. 一维数据的表示

(1). 如果数据间有序:使用列表类型

Python文件与异常_Python_24

(2). 如果数据间无序:使用集合类型

Python文件与异常_字符串_25

3. 一维数据的存储

(1). 存储方式一:空格分隔

Python文件与异常_python_26

(2). 存储方式二:逗号分隔

Python文件与异常_字符串_27

(3). 其他方式

Python文件与异常_Python_28

4. 一维数据的处理

Python文件与异常_字符串_29

(1). 一维数据的读入处理

Python文件与异常_数据_30

(2). 一维数据的写入处理

Python文件与异常_数据_31

五. 二维数据的格式化和处理

1. 二维数据的表示

(1). 使用列表类型

Python文件与异常_python_32


Python文件与异常_数据_33


Python文件与异常_python_34

2. CSV数据存储格式

(1). CSV(Comma-Separated Values, 由逗号分隔的值)

Python文件与异常_python_35

(2). 举例

Python文件与异常_数据_36

(3). 约定

Python文件与异常_python_37

3. 二维数据的存储

Python文件与异常_python_38

4. 二维数据的处理

(1). 二维数据的读入处理

Python文件与异常_Python_39

(2). 二维数据的写入处理

Python文件与异常_数据_40

(3). 二维数据的逐一处理

Python文件与异常_数据_41

六. 异常和异常处理

1. 异常的定义

异常:错误信息影响程序的正常执行

不同的异常被定义为不同的对象,对应不同的错误

异常名称

描述

Exception

常规异常的基类

ZeroDivisionError

除数为零

IOError

输入/输出操作失败

IndexError

序列中没有此索引

KeyError

映射中没有这个键

NameError

未声明/初始化对象

异常会立即终止程序的执行,无法实现原定功能。
如果在异常发生时,能及时捕获并作出处理,就能控制异常,纠正错误,保证程序顺利执行

2. 异常的处理

1. 方式一

Python语言提供了try子句来进行异常的捕获与处理

语法格式:

try:
语句
except 异常名称:
捕获异常时处理
else:
未发生异常时处理

程序执行时,如果try子句中发生了指定的异常,则执行except子句部分进行异常的处理,如果try子句执行没有发生异常则执行else子句部分

try-except代码块的作用就是当try代码块中的程序代码运行没有错误,则跳过except代码块;反之如果try代码块中的程序代码运行出现错误,则运行except代码块中的内容,一般except代码块中的内容都是输出错误信息。

如果except代码块后面还有其他代码,程序将继续运行,因为 Python 已经在程序报错后执行了except代码块中的内容,告诉了错误信息,所以可以继续运行程序。

2. 方式二

通过raise显式抛出异常信息

Python 的raise显式抛出自己的包含特定信息的异常。一旦执行了raise语句,raise之后的语句将不能执行。

def read_C():
try:
C = float(sys.argv[1])
except ValueError:
raise ValueError('Degrees must be number, not "%s"' % sys.argv[1])
if C < -273.15:
raise ValueError('C=%g is a non-physical value!' % C)
return C

在raise关键字之后抛出一个ValueError类型的异常信息,并在后面的参数中定义具体的异常信息。

3. 方式三

try…except…finally…

Python文件与异常_字符串_42

try:
num = "1" + 1 # 会发生TypeError错误
print(num)
except TypeError: # 只有发生TypeError时才运行except子句
print("发生TypeError错误")
finally:
print("执行finally子句")
try:
num = 10 * 1 # 不会发生TypeError错误
print(num)
except TypeError:
print("发生TypeError错误")
finally:
print("执行finally子句")

结果;
发生TypeError错误
执行finally子句
10
执行finally子句

3. 多异常处理

try:
执行语句
except IOError:
print("发生了输入/输出异常")
except KeyError:
print("发生了键访问异常")
except SyntaxError:
print("发生了 Python 语法异常")
# 如果执行语句发生了两个异常类型中的一个,则运行except子句
try:
执行语句
except (IOError,KeyError):
print("发生了IOError或者KeyError异常")

4. 注意事项

异常处理不能消灭异常,但是却可以让原本不可控的异常及时被发现,并按照设计好的方式被处理

异常处理让程序不会被意外的终止,而是按照设计以不同的方式结束运行。

except后的异常类型至关重要,需要根据try子句具体操作进行恰当选择。


标签:文件,Python,数据,except,字符串,异常
From: https://blog.51cto.com/u_15923298/5970750

相关文章

  • Python安装教程
    一.Python需要安装什么因为Python是跨平台的,它可以运行在Windows、Mac和各种Linux/Unix系统上。在Windows上写Python程序,放到Linux上也是能够运行的。把Python安装到你的电......
  • 【问题记录】【SpringBoot】Filter中抛出的异常不会走RestControllerAdvice全局异常捕
    1 问题现象//如下是我定义的全局异常捕获@RestControllerAdvicepublicclassRestExceptionHandler{/***默认全局异常处理。*@paramethee......
  • python解析rosbag
      #coding:utf-8#!/usr/bin/python#Extractimagesfromabagfile.importsysimportosimportroslib#roslib.load_manifest(PKG)importrosbagimpo......
  • 实验6 文件应用编程
    #include<stdio.h>#defineN7#defineM80typedefstruct{charname[M];//书名charauthor[M];//作者}Book;intmain(){Bookx[N]={{"《雕塑家》","......
  • Python常用库的使用
    文章目录​​一.Python计算生态​​​​二.如何导入第三方库​​​​方式一:pip命令行直接安装​​​​方法二:手动下载第三方库,再使用pip安装(适用部分库直接pip安装失败)​......
  • Java 批量大文件上传下载
    ​ 文件上传是一个老生常谈的话题了,在文件相对比较小的情况下,可以直接把文件转化为字节流上传到服务器,但在文件比较大的情况下,用普通的方式进行上传,这可不是一个好的办法......
  • Python拷贝文件,拷贝指定目录下的所有pdf文件到另一个目录
    importosimportshutildata=os.walk(r'D:\a\b')DPATH=r'D:\pdf_file'forpath,file_dir,file_listindata:#print(path,file_list)forfile_nameinfile_li......
  • Python3入门之一
    Python3入门之一Python标识符大小写敏感。 基本数据类型:int类型:Python所能表示的整数大小只受限于机器内存,而非固定数量的字节数。str类型Pyt......
  • python将字符串作为变量去赋值
    exec可将字符串作为变量去赋值,以下两个方式,value不能生效。原因不清楚,有大佬了解还请告知self.temp和value初始值都为-999以下代码执行结果为:1.0-999 ......
  • Duplicate File Finder Pro - 重复文件查找器,给你的 Mac 清理出大量磁盘空间
    重复文件查找器DuplicateFileFinderPro是一个实用程序,只需3次点击就能在Mac上找到重复的文件。拖放功能和尽可能多的文件夹,你想,然后按下扫描按钮。在一分钟,应用程序......