31文件,异常,文件的输入输出

这篇博客探讨了Python中的基本文件输入输出操作,包括如何读写文件,以及在处理文件时如何有效地进行异常捕获和处理。通过实例代码练习,读者可以深入理解文件操作的常用语法和异常处理机制。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

python基础文件/异常
1.文件的输入输出
#1.打开文件 open 函数
open(file,[option])
#file 是要打开的文件
#option是可选择的参数,常见有 mode  等

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

#3.文件的读取
f.read(size)  #读取文件的内容,将文件的内容以字符串形式返回。
'''size是可选的数值,指定字符串长度,如果没有指定size或者指定为负数,
就会读取并返回整个文件。当文件大小为当前机器内存两倍时就会产生问题,反
之就尽可能大的size读取和返回数据,如果到了文件末尾,会返回空字符串。
'''

f.readline() #从文件中读取单独一行。
'''字符串结尾会自动加上一个换行符\n,只有当文件最后没有以换行符结尾时,这一
操作才会被忽略,这样返回值就不会有混淆。如果返回空字符串,表示到达率文件末尾,
如果是空行,就会描述为\n,一个只有换行符的字符串。
'''

f.readlines() #一次读取所有,返回一个列表,列表的元素为文件行的内容。
'''可以通过列表索引的方式将文件的每一行的内容输出。
可以通过for循环迭代输出每一行的信息。
'''

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

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

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


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


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

#8.with 形式打开文件,里面的语句执行完后会自动关闭文件
with open('文件名') as f:
    f.read() 
2.异常语法
try:
    suite1          #测试语句块
except exception1:
    suite2          #如果测试语句suite1中发生exception1异常时执行
except (exception2,exception3):
    suite3          #如果测试语句suite1中发生元组中任意异常时执行
except exception4 as reason:    #as把异常的原因赋值给reason
    suite4          #如果测试语句suite1发生exception4的异常时执行
except:
    suite5          #如果测试语句suite1发生异常在所列出的异常之外时执行
else:
    suite5          #如果测试语句块suite1中没有发生异常时执行
finally:
    suit6           #不管测试语句suite1中又没有发生异常都会执行

'''
注意:中间的except,else,finally都是可选的,但至少有一个,不然try就没有意义了,根据实际中的需求来选择。
所有错误类型都继承自BaseException
https://docs.python.org/3/library/exceptions.html#exception-hierarchy
'''

#注意:如果抛出父类异常,在子类不会再获取,如下:
try:
    fun()
except Exception as e:
    raise Exception
except ImportError as e:
    raise ImportError
finally:
    pass

'''
在上面的例子中,下面的ImportError就不会被抛出,应为ImportError继承Exception,但是可以把Exception放在后面是可以的
e可以得到系统给出的报错信息
'''

assert #断言
'''
测试表示式,其返回值为假,就会触发异常
'''

assert 1==1     #没有返回值
assert 1==2     #返回AssertionError
代码练习:
###文件操作及异常

##编码问题
'''
gbk  汉字编码  cp936 汉字2字节
utf-8  unicode  汉字3字节
ASCLL      MAC默认
'''
##相对路径 绝对路径
#f=open('abc.txt','w')  #相对路径

#f=open(r'C:\Users\JiaNeng\Desktop\基础19班\第四章\01文件操作及异常\lucky.txt','w')

#f:文件流   输出输出流
##
##f=open('adc.txt','w')
##
##f=open('abc.txt','r')
##
##f=open('lucky.txt','a')
'''
r 只读模式,文件不存在时会报错。
w 写入模式,文件存在会清空之前的内容,文件不存在则会新建文件。
x 写入模式,文件存在会报错,文件不存在则会新建文件。
a 追加写入模式,不清空之前的文件,直接将写入的内容添加到后面。
b 以二进制模式读写文件,wb,rb,ab。\n
+ 可读写模式,r+,w+,x+,a+,这几种模式还遵循了r,w,x,a的基本原则。
'''
#f=open('abc.txt','wb')



#3.文件的读取
#f=open('abc.txt','r')
#f.read()   读取文件的suoyou内容,将文件的内容以字符串形式返回

#f.seek(0,0)

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

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


##文件的写入
#f=open('abc.txt','a+')
#f.flush()


##异常语法
try:
     a
except Exception:
     print('执行这个1错误的补救')
except TypeError:
     print('执行这个2错误的补救')
except NameError:
     print('可能是其他错误')
else:
     print('我哪里错了,我没错啊')

finally:
     print('无论如何都会执行')
     #f.close()
b=1

try:
     a=input('输入数字:')
     if a.isdigit():
          print(a)
     else:
          raise TypeError
except Exception:
     print('请遵守游戏规则')
#断言  assert
f=open('abc.txt','w')
##由于文件操作姐不展示打印结果!!!!!
问题解答:
#!/usr/bin/python
# -*- coding: UTF-8 -*-
#1.定义一个函数,读取 reform.txt 的内容。
#  把文件reform.txt中的名人名言,改成“某某说:......”的形式,保存到另一个文件中。
'例:雨果说:大胆是取得进步所付出的代价。'
#解答:
def reform():
    f = open('reform.txt','r+')    
    li = []
    for line in f.readlines():
        line = line.replace('\n','——')
        li.append(line)
    s = ''.join(li)       
    print(s)  
    li = s.split(sep = '——')
    print(li)  
    for i in range(len(li)):
        if(i>0)&(i%2 !=0):
            li[i] = str(li[i] +'说:')
            li[i-1] = str(li[i-1] +'\n')
            li[i-1],li[i] = li[i],li[i-1]
    f.close()
    f2 = open('reformed.txt','w+')
    print(li)  
    f2.writelines(li)
    f2.flush()
    f2.close()
def reform1():
    f = open('reform.txt','r+')    
    for line in f.readlines():
        li = []
        line = line.replace('\n',' ')
        li.append(line)
        s = ''.join(li)       
        print(s)  
        li = s.split(sep = '——')
        print(li)
        li[1] = str(li[1] +'说:')
        li[0] = str(li[0] +'\n')
        li[0],li[1] = li[1],li[0]
        print(li)    
        f2 = open('reformed.txt','a+')
        s = ''.join(li)    
        f2.write(s)
        print('----------')
##        break
    f2.flush()
    f.close()
    f2.close()
##函数调用
##reform()
reform1()    
#2. 捕捉用户输入时异常,确保程序正常执行

import random

def test():
    n = random.randint(1,10)
    print(n)
    c = 0
    while c<3:
        try:
            a = input('您还有 %d 次机会,请输入1-10 整数:'%(3-c))
            a = int(a)
            if 1<=a<=10:
                if a==n:               
                    print('猜对啦')
                    break
                elif a < n:
                    print('小啦')
                    c += 1
                else:
                    print('大啦')
                    c += 1
            else:
                  raise ValueError
        except Exception:
            print('ValueError,请遵守游戏规则')
        if c==3:
            t=input('您的机会已经用尽,是否还继续 (y:继续   任意键: 结束): ')
            if t=='y':
                c = 0

test()

输出结果:

大胆点,伟大无比的力量自会来帮助你。——比锡耳王 
['大胆点,伟大无比的力量自会来帮助你。', '比锡耳王 ']
['比锡耳王 说:', '大胆点,伟大无比的力量自会来帮助你。\n']
----------
大胆是取得进步所付出的代价。——雨果 
['大胆是取得进步所付出的代价。', '雨果 ']
['雨果 说:', '大胆是取得进步所付出的代价。\n']
----------
不怕的人前面才有路。——有岛武信 
['不怕的人前面才有路。', '有岛武信 ']
['有岛武信 说:', '不怕的人前面才有路。\n']
----------
世界是属于勇敢者的。——哥伦布 
['世界是属于勇敢者的。', '哥伦布 ']
['哥伦布 说:', '世界是属于勇敢者的。\n']
----------
走自己的路,叫别人去说吧。——但丁 
['走自己的路,叫别人去说吧。', '但丁 ']
['但丁 说:', '走自己的路,叫别人去说吧。\n']
----------
死是每个人都能做到的,拿出勇气活下去才是勇敢。——罗教·柯迪 
['死是每个人都能做到的,拿出勇气活下去才是勇敢。', '罗教·柯迪 ']
['罗教·柯迪 说:', '死是每个人都能做到的,拿出勇气活下去才是勇敢。\n']
----------
人的一生中可能犯的错误,就是经常担心犯错误。——哈伯德 
['人的一生中可能犯的错误,就是经常担心犯错误。', '哈伯德 ']
['哈伯德 说:', '人的一生中可能犯的错误,就是经常担心犯错误。\n']
----------
没有比害怕本身更害怕的了。——培根 
['没有比害怕本身更害怕的了。', '培根 ']
['培根 说:', '没有比害怕本身更害怕的了。\n']
----------
你怕狼,就别到树林里去。——列宁 
['你怕狼,就别到树林里去。', '列宁 ']
['列宁 说:', '你怕狼,就别到树林里去。\n']
----------
人生自古谁无死,留取丹心照汗青。——文天祥 
['人生自古谁无死,留取丹心照汗青。', '文天祥 ']
['文天祥 说:', '人生自古谁无死,留取丹心照汗青。\n']
----------
4
您还有 3 次机会,请输入1-10 整数:1
小啦
您还有 2 次机会,请输入1-10 整数:a
ValueError,请遵守游戏规则
您还有 2 次机会,请输入1-10 整数:4
猜对啦
>>> 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

泸州月

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值