<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语句,告诉系统发生错误时什么也不做,尝试继续运行
posted @ 2020-08-09 00:16  Faura_Sol  阅读(110)  评论(0)    收藏  举报
Live2D