<Python> python从入门到实践(6) --文件与异常
文件操作
文件的理解
文件是存储在辅助存储器上的数据序列,是数据存储的一种形式,有文本文件和二进制文件两种展示方式(所有文件的存储都是以二进制存储,但是展示方式)。
- 文本文件是由单一特定编码组成的文件,如UTF-8编码,由于存在编码,也被看成是存储着的长字符串,适用于例如.txt文件.py文件
- 二进制文件直接由比特0或1组成,没有字符统一编码,适用于例如.png文件.avi文件
文件操作一般有三个步骤:打开,操作和关闭
文件的打开
文件打开:<变量名> = open(<文件名>, <打开模式>),
-
<变量名> 又称为文件句柄,
-
<文件名>为文件的路径和名称,如果与源文件同目录可以省略路径,其他情况可以使用绝对路径或相对路径,在windows模式下,本应使用''作为子目录的分隔,但是由于python中使用\作为转义字符,所以可以使用'/'或'\\'作为子目录间的分隔,如
# 绝对路径 "D:/PYE/f.txt" "D:\\PYE\\f.txt" # 相对路径 "./PYE/f.txt" "f.txt" -
<打开模式>控制以文本模式或二进制模式打开、读或写模式打开
打开模式 描述 'r' 只读模式,默认值,如果文件不存在,返回FileNotFoundError 'w' 覆盖写模式,文件不存在则创建,存在则完全覆盖 'x' 创建写模式,文件不存在则创建,存在则返回FileExistsError 'a' 追加写模式,文件不存在则创建,存在则在文件最后追加内容 'b' 二进制文件模式 't' 文本文件模式,默认值 '+' 与r/w/x/a一同使用,在原功能基础上增加同时读写功能
例子:
#通过文件名打开
with open('<文件名>') as <对象名>:
contents = <对象名>.read()
print(contents.rstrip())
#rstrip()用于删除字符串末尾的空白
#通过路径打开,相对路径打开统一文件夹的文件,绝对路径打开绝对位置的文件
relative_file_path = '\something\somenting\filename'
with open(relative_file_path): as file1
file_path = 'C:\something\somrthing\filename.扩展名'
with open(file_path) as file2:
创建一个包含文件各行内容的列表:使用关键字with时,open()得到的文件仅仅在with内可用,可以通过将文件的每一行存储到一个列表中
文件操作
文件读取
| 操作方法 | 描述 |
| :--------------------: | :----------------------------------------------------------: |
| <f>.read(size=-1) | 读入全部内容,如果给出参数,读入前size长度 |
| <f>.readline(size=-1) | 读入一行内容,如果给出参数,读入该行前size长度 |
| <f>.readlines(hint=-1) | 读入文件所有行,以每行为元素形成列表 如果给出参数,读入前hint行 |
``` python
# 遍历全文本方法一:一次读入、统一处理
fname = input("请输入要打开的文件名称:")
fo = open(fname,"r")
txt = fo.read()
#对全文txt进行处理,由于文件缓冲量太大而效率不高
fo.close()
# 遍历全文本方法二:按数量读入、逐步处理
fname = input("请输入要打开的文件名称:")
fo = open(fname,"r")
txt = fo.read(2)
while txt != "":
#对txt进行处理
txt = fo.read(2)
fo.close()
# 文件的逐行遍历方法一:一次读入、分行处理
fname = input("请输入要打开的文件名称:")
fo = open(fname,"r")
for line in fo.readlines():
print(line)
fo.close()
# 文件的逐行遍历方法二:分行读入、逐行处理
fname = input("请输入要打开的文件名称:")
fo = open(fname,"r")
for line in fo:
print(line)
fo.close()
```
文件写入
| 操作方法 | 描述 |
| --------------------- | ------------------------------------------------------------ |
| <f>.write(s) | 向文件写入一个字符串或字节流 |
| <f>.writelines(lines) | 将一个元素全为字符串的列表写入文件,但是元素之间不会自动换行 |
| <f>.seek(offset) | 改变当前文件操作指针的位置,offset含义如下: 0 – 文件开头; 1 – 当前位置; 2 – 文件结尾 |
``` python
fo = open("output.txt","w+")
ls = ["中国", "法国", "美国"]
fo.writelines(ls)
fo.seek(0)
# 由于写入内容后,文件指针到达了内容末尾,所以需要先回到文件头再输出
for line in fo:
print(line)
fo.close()
```
异常:
使用try-expect代码块
~~~ python
try:
<语句块1:测试语句,可能有bug>
except <错误名>:
<语句块2:自定义语句,通常用来提示错误位置和原因>
else:
<语句块3:应该正常进行的语句>
finally:
<语句块4:无论如何都会进行的语句>
#错误名称是系统预定义的几类错误的名称,是一个可选项,如果加了此项,那么except语句后的语句2只会在发生对应名称的错误后执行
~~~
- except块内可以使用pass语句,告诉系统发生错误时什么也不做,尝试继续运行

浙公网安备 33010602011771号