文件、异常、文件的输入输出

 

一、文件操作

  1、编码问题

    gbk :汉字编码,cp936(另一个名字),汉字占2个字节

    utf-8:  unicode,汉字占3个字节

    ascll码: Mac默认的编码

 

 

2、open函数 (显示紫色,内置函数)

open(file,mode='r',......)  #前面一个必备参数是输入文件,后面的mode是打开方式

 

  3、相对路径和绝对路径

    

f=open('abc.txt','w')  #在py文件旁边创建了一个txt文件,在文件的同一层创建文件,这边是相对路径

f=open(r'F:\dcache.txt,'w') #具体到什么位置,这边是绝对路径

f是一个文件流(输入输出流)

  4、文件的打开模式

r #只读模式,文件不存在时会报错
w #写入模式,文件存在会清空之前的内容,文件不存在会新建文件
x #写入模式,文件存在会报错,文件不存在会新建文件
a #追加写入模式,不清空之前的文件,直接将写入的内容添加到后面
b #以二进制模式读写文件,wb、rb、ab
+ #可读写模式,r+、w+、x+、a+,这几种模式还遵循r、w、x、a的基本原则

    w

f=open('abc.txt','w') #操作以后会将原文件的内容清空,若不存在文件,则会新建文件,w+情况下会遵循w的基本原则

    r

f=open('a.txt','r') #r模式是只读模式,文件不存在则会报错,前提是文件必须存在

    x

f=open('abc.txt','x') #文件存在就会报错,文件不存在就会新建文件

    a

f=open('abc.txt','a') #不清空原文件内容,直接要写入的内容添加到后面

    b 

f.write(b'abcd') #在用b的时候必须在输入内容前放一个b,后面必须是以二进制形式   

f.write() #将要写入的内容以字符串形式通过write方法写入文件中。

  文件的读取

f.read(sizw)  #读取文件的内容,将文件内容以字符串形式返回。

f.readline()   #从文件中读取单独一行

f.readlines()   #一次读取所以,返回一个列表,列表的元素为文件行的内容

 

f=open('1ucky.txt','r')
f.read()
'aaaa\nbbb\nccc\nddd'        \n换行

f.read()   #再读一遍,返回''   #没值了

f.seek(0,0)    #前面一个参数表示一个偏移量,后面一个参数表示起始位置,是默认参数,这个0可以不写

f.read()  #又可以读出来


f.readline()
'aaaa\n'     #读取第一行内行和换行(从文件中单独读取一行)
f.seek(0,0)
0
>>> f.readlines()
['aaaa\n', 'bbb\n', 'ccc\n', 'ddd']

 

文件写入    2种

f.write()   #将要写入的内容以字符串行书通过,write方法写入文件中

f.writelines()   #括号里必须是由字符串元素组成的序列

f=open('1ucky.txt','a+')

f.write('lingang')
7
f.write('lin刚')
4

 

 

f=open('1ucky.txt','a+')
f.writelines(['6666\n','7777'])
f.flush()
aaaa
bbb
ccccc
ddd6666
7777
f.writelines(['\n','6666\n','7777'])
f.flush()

#要换行前面加\n(要自己写进去)  以序列类型由字符串元素组成序列
f.tell()  #返回字节

f.seek(10,0)   偏移10个
10
f.readline()

 

f.closed

False    #文件还没关

f.mode

'a+'  #返回打开文件的模式

f.name

'abc.txt'     #打开的文件名

f.encoding

'cp936'      #表示什么编码

 

 
要读取文件,先要打开一个文件:
f=open('abc.txt','r')
然后读取文件:
    f.read()
以字符串的形式读取出来,换行用\n形式书写
若再读取一遍
     f.read()
输出:
    '' #原因是读取过一遍后指针(光标)到了读完以后的点,再往后面读的话就是空的字符串

    f.seek(0,0) #光标位置,前面一个参数表示偏移量,后面一个参数表示起始位置,默认起始位置为0,可以表示为f.seek(0),可以重置光标
 

    f.readline()

f.readline() #将第一行的内容以字符串的形式读取出来,包括换行\n

f.readlines() #一次读取所有,返回一个列表,列表的元素为文件行的内容

  文件的写入

    f.write

 
f=open('abc.txt','a+')
f.write('liugang') #返回输入内容的长度

f.flush() #将上面的内容冲刷进去

f.readlines() #括号里面必须是以字符串元素组成的序列类型(列表,元组)写进去,换行\n需要自己写进去
f.flush()
 

  光标位置

f.tell() #返回光标在文件中的位置

f.seek(offset,from) #常用f.seek返回其实起始位置

  8、 查看文件信息

f.closed         #查看文件是否已经关闭,返回布尔值
f.mode         #返回(查看)文件打开模式
f.name         #返回(查看)文件名

  9、with 形式打开文件,里面的语句执行完后会自动关闭文件

 

with open('文件名','w') as f:
    f.write('abcde')
返回:5
文件能够自己冲刷和关闭

 

异常语法:Exception  hierarchy

BaseException

try:
a b=1 运行时会出现a未被定义的语法错误,随后b=1也不再运行,用下面的测试错误后,b=1就可以被调用了 try: a except NameError: #名字错误 print('执行这个1错误的补救') except TypeError: #类型错误 print('执行这个2错误的补救') except Exception: #这个是错误的总目录 print('可能是其他的错误') else: #没有错误 print('我哪里错了,我没错') finally: print('无论如何我都会执行') f.close() #关闭文件
 

try:
suite1 #测试语句块
except exception1: #如果测试语句suite1中发生exception1异常时执行
suite2

 
try:
    fun()
except Exception: #错误总目录被执行后,下面的分目录就不会执行了
    print('执行这个错误')
。。。
else:
    pass
finally:
    pass
 
 
try:
    a=input('输入数字:')
    if a.isdigit():
        print(a)
    else:
        raise TypeError #自己把错误先找出来
except Exception:
    print('请遵守游戏规则')
 

  2、assert 断言   测试表达式,其返回值为假,就会触发异常

assert 1==1 #测试1-==1这个代码是不是错的,没错没有返回值,错了返回错误点及原因

 

with 形式打开文件,里面的语句执行完后会自动关闭文件

 

with open('文件名','w') as f:
    f.write('abcde')
返回:5
文件能够自己冲刷和关闭,不需要写flush, #能够自己冲刷和关闭

 

文件的写入

 f.write() #将要写入的内容以字符串的形式通过write方法写入文件中。
 f.writelines() #括号里必须是由字符串元素组成的序列。

保存和关闭

  f.flush()在读写模式下,当写完的数据想要读取出来时,要先缓存区的内容保存到文件当中。

  f.close() 关闭文件。对一个已经关闭的文件进行操作会报错。

光标位置

  f.tell() 返回光标在文件中的位置。
  f.seek(offset,from) #常用 f.seek(0) 返回起始位置
  在文件中移动文件指针,从from(0代表起始位置,1代表当前位置,2代表文件末尾)偏移offset个字节。
  常用 f.seek(0,0) 返回起始位置。 其他了解一下

查看文件信息
  closed 查看文件是否已经关闭,返回布尔值。
       mode 返回文件打开模式。
       name 返回文件名。

with 形式打开文件,里面的语句执行完后会自动关闭文件

  with open('文件名') as f:

    f.read() 

 
 1 try:
 2     a=1
 3 except NameError:
 4     print('我有错')
 5 except TypeError:
 6     print('其实我错了')
 7 except Exception:
 8     print('你们都没错,我错了')
 9 else:
10     print('啊,代码正确呀')
11 finally:
12     print('不管了,我要执行')
 

 

 
 1 try:
 2     suite1 #测试语句块
 3 except exception1:
 4     suite2 #如果测试语句suite1中发生exception1异常时执行
 5 except (exception2,exception3):
 6     suite3 #如果测试语句suite1中发生元组中任意异常时执行
 7 except exception4 as reason: #as把异常的原因赋值给reason
 8     suite4 #如果测试语句suite1发生exception4的异常时执行
 9 except:
10     suite5 #如果测试语句suite1发生异常在所列出的异常之外时执行
11 else:
12     suite5 #如果测试语句块suite1中没有发生异常时执行
13 finally:
14     suit6 #不管测试语句suite1中又没有发生异常都会执行
15 
16   
 

  注意:中间的except,else,finally都是可选的,但至少有一个,不然try就没有意义了,根据实际中的需求来选择。

  所有错误类型都继承自BaseException
  https://docs.python.org/3/library/exceptions.html#exception-hierarchy

  注意:如果抛出父类异常,在子类不会再获取,如下:

 
1 try:
2     fun()
3 except Exception as e:
4     raise Exception
5 except ImportError as e:
6     raise ImportError
7 finally:
8     pass
 

  在上面的例子中,下面的ImportError就不会被抛出,因为ImportError继承Exception,但是可以把Exception放在后面是可以的

  e可以得到系统给出的报错信息
'

 

 

 

posted @ 2018-03-30 15:33  追梦长胜  阅读(518)  评论(0编辑  收藏  举报