第八节课 文件、异常、文件的输入输出

一、文件操作

  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('E:softwarepython3lucky.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,后面必须是以二进制形式

  5、文件的读取

    f.read()

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

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

    f.readline()

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


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

  6、文件的写入

    f.write

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

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

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

  7、光标位置

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
文件能够自己冲刷和关闭

二、异常语法

  1、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
    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这个代码是不是错的,没错没有返回值,错了返回错误点及原因

 三、作业

  1、定义一个函数,读取 reform.txt 的内容。把文件reform.txt中的名人名言,改成“某某说:......”的形式,保存到另一个文件中。

    思路:先定义一个函数,一个读取reform.txt,另一个为另存为的文件,先用f.readlines()读取出来,读取出来是一个列表,然后就可以进行切片,替换,换位等操作,再将结果写入新文件,冲刷上去后关闭

 
def change_file():  #定义函数
    f=open('reform.txt','r')  #只读该文件
    f1=open('1.txt','w+')  #读写新文件
    li=f.readlines()   #读取原文件
    for i in li[::2]:   #建立循环,以切片后的列表内每个索引
        a,b=i.split('。——')  #分割字符串
        b=b.replace('
','说:') #替换

        c=b+a+'

'   #字符串拼接
        f1.write(c)  #写入新文件
        f1.flush  #冲刷
    f1.close #关闭新文件
 

  2、捕捉用户输入时异常,确保程序正常执行

 
import random

def test():
    n = random.randint(1,10)  
    c = 0
    while c<3:
        a = input('您还有 %d 次机会,请输入1-10 整数:'%(3-c))
        try:  #为新加项,测试a不是数字的情况
            a = int(a)
            if 1<=a<=10:
                if a==n:               
                    print('猜对啦')
                    break
                elif a < n:
                    print('小啦')
                else:
                    print('大啦')
            else:
                print('输入错误!!!')
        except ValueError:  #可能会出现的报错
            print('请遵守游戏规则')  #输出该问题的输出
        c+= 1
    if c==3:
        t=input('您的机会已经用尽,是否还继续 (y:继续   任意键: 结束): ')
        if t=='y':
            c = 0
 
原文地址:https://www.cnblogs.com/sysun110/p/11267587.html