Python文件操作和异常处理

本文详细介绍了Python中的文件操作,包括读取文件(逐行、按字符、使用with语句)、写入文件(覆盖、追加),以及使用flush方法、输入输出重定向、异常处理(raise、try-except、finally)和assert语句的使用。
摘要由CSDN通过智能技术生成

文件操作

读取文件

# 文件的读取

infile = open('./demo.txt', 'r')   # 以读取模式打开文件,返回文件对象

# 读取文件对象后,如果不先关闭再重新打开该文件,则无法再次遍历该文件。\
# 或者使用seek函数把文件中的游标设置文件开头再进行遍历

# for循环遍历文件对象,每次读取一行,读取的内容包含换行符\n
for line in infile:
    print(line.strip('\n'), end='; ')
print()

# 逐行读取文件
infile.seek(0)            # 设置文件游标的位置,即开始读取的位置
line = infile.readline()  # 读取一行,返回读取的内容及行尾的换行符\n
while line != '':         # 当readline读取到文件结尾时返回空字符串
    print(line.strip('\n'), end='; ')
    line = infile.readline()
print()

# 读取指定个数的字符,空格、换行符\n等算1个字符
infile.seek(2)  
print('当前游标位置:', infile.tell())
char = infile.read(3)  
print(char)

# 一次读取整个文件,返回一个列表,每行内容和换行符\n作为一个元素
infile.seek(0)
ls = infile.readlines()  
print(ls)

infile.close()

写入文件

# 文件的写入

# 以覆盖写入模式打开文件,若文件已存在,会将原文件清空再写入;否则创建新文件写入
outfile = open('./demo.txt', 'w')    
# 以追加写入模式打开文件,若文件已存在,在原文件末尾写入;否则创建新文件写入
outfile1 = open('./demo1.txt', 'a')  

ls = list(range(10))
for i in range(10):
    outfile.write(str(i)+'\n')       # write方法的参数只能时字符串,且需要显示输入换行符\n
    outfile1.write(str(i)+'\n')

outfile.close()
outfile1.close()

with语句

# with语句

ls = [1.56, 2.13]
with open('./demo.txt', 'w') as outfile:  # 执行完with语句块或出现异常时都会自动关闭文件
    for i in ls:
        v = round(i, 1)             # 保留一位小数
        outfile.write(str(v)+'\n')  # 写入文件

flush方法

"""
flush函数用于清空存放写入文件的缓冲区。
向文件中写入数据时,数据先暂时被放在缓冲区,并没有立即写入文件中,等到适当的时候
才一次性写入文件。使用flush函数可以强制立即把缓冲区的数据写入到文件中。
"""

file = open("./demo/flush_test.txt", "w")     
for i in range(10):
    file.write(str(i) + "\n")
    file.flush()

file.close()

输入输出重定向

输入输出重定向,在操作系统命令行使用尖括号<、>实现。

如果有大量数据需要输入,先把数据存在文件中,然后在操作系统命令行(终端)输入

命令来输入数据。

输入重定向,

python demo.py < input.txt

输入输出重定向,

python demo.py < input.txt > output.txt

异常处理

raise抛出异常

# 当程序被执行时可能出现异常时,在可能出现异常的地方主动抛出异常,避免程序崩溃
def divide(a, b):
    if b == 0:
        raise ValueError("除数不能为0!")  # 括号中字符串为对异常的描述
    return a / b

处理异常

"""
try-except语句捕获并处理异常。
try语句块用来捕获异常,当发生异常后,不再执行之后的语句。
然后查找对应的异常处理器except,有对应异常处理器时则执行异常处理语句。
当异常信息与设置的异常处理器except不匹配时,程序仍会抛出异常。
当有多个异常处理器时,越具体的异常处理器越放到前面,越一般的越往后放。
"""
try:
    file = open('./demo11.txt', 'r')
    for line in file:
        v = int(line)
        print(v)
except IOError as exception:     # 指定处理IOError异常,\
                                 # 用关键字as把异常对象存在在变量exception,从而获得异常信息
    print('文件不存在!', exception)
except ValueError as exception:  # 指定处理ValueError异常
    print('无法转换为整数!', exception)
except:                          # 不指定异常种类,处理所有异常
    print('程序有异常!')
"""
文件操作时一定要关闭打开的文件,如果在写入时发生异常,导致不能关闭文件,则内容并没有
真正的写入文件,只有关闭文件才能写入到文件。
使用finall语句可以确保执行关闭文件的命令。
如果需要执行类似关闭文件的清理类工作,都应该使用finall语句,以确保无论程序是否出现
异常都会执行清理工作。
"""
ls = [1.56, 2.13, 'a']
file = open('./demo1.txt', 'w')
try:
    for i in ls:
        v = round(i, 1)          # 保留一位小数
        file.write(str(v)+'\n')  # 写入文件
except TypeError as exception:
    print(exception)
finally:                         # 不论是否发生异常该语句都会执行
    file.close()
    print('文件已关闭!')

assert抛出异常

""" 
assert语句只应在调试时使用,不应在生产环境中使用,因为它们可以轻易地被全局禁用,从而引入不易发现的错误。
在生产环境中,应使用raise语句异常处理。
在调试时,assert expression,当expression为False时抛出AssertError异常,为True时正常执行。
相当于,
if not expression:
    raise AssertionError
"""
def is_in_container(i):
    ls = [1, 2, 3]
    assert i in ls, "item not in container"

try:
    is_in_container(10)
except AssertionError as exception:
    print(exception)
  • 7
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值