python 文件和异常

本文介绍了Python中如何读取和写入文件,包括一次性读取文件内容、逐行读取、创建包含文件行的列表,以及使用with关键字管理文件。此外,还探讨了文件路径、异常处理以及不同写入模式的使用,如'w'、'a'和'r+'模式。

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

1. 从文件中读取数据

读取文件的两种方式:
一次性读取文件的全部内容。
每次一行的方式逐步读取。

1.1 读取整个文件
  1. 想要读取文件,第一步是打开文件,才能访问它。
    open() 接受一个参数:打开文件的名称
    with open('test1') as file_object:
    	contents = file_object.read()
    print(contents)
    
    在这里插入图片描述
    python在当前执行的文件所在的目录中查找指定的文件。
    函数open()返回一个表示文件的对象,python将该对象赋给file_object 供以后使用。

关键字with在不再需要访问文件后将其关闭。

为什么不调用close()。

  1. 如果程序存在BUG,导致方法close()未执行,文件将不会关闭。未妥善关闭文件可能导致数据丢失或受损。
  2. 如果在程序中过早的调用close(),会发现需要使用文件的时候它已关闭(无法访问),这会导致更多的错误。

所以并非在任何情况下都能轻松确定关闭文件的恰当时机,但是通过前面使用的结构就可以让python去确定:你只管打开文件,并在需要的时候使用它,python自会在合适的时候自动将其关闭。

有了表示test1 的文件对象后,使用方法read() 读取这个文件的全部内容,并将其作为一个长长的字符串赋值给变量contents。这样通过打印contents的值,就可以将这个文本文件的全部内容显示出来。

删除字符串末尾的空白:在函数调用print()中使用rstrip();

1.2 文件路径
file_path = 'D:/Desktop/test1.txt'

显示文件路径时,windows系统使用反斜杠(\),而不是斜杠(/),在代码中依然可以使用斜杠。

通过使用绝对路径,可读取系统中任何地方的文件,目前来说最简单的做法是:

  1. 将数据文件存储在程序文件的所在目录
  2. 存储在程序文件所在目录下的一个文件夹中。

如果在文件路径中直接使用反斜杠,将引发错误,因为反斜杠用于对字符串中的字符进行转义。

1.3 逐行读取

要以每次一行的方式检查文件,可对文件对象使用for循环。

file_path = 'D:/desktop/test1.txt'
with open(file_path) as file_object:
    for line in file_object:
        print(line)
        // print(line.rstrip())

消除多余的空白行,可在函数调用print()中使用rstrip()

1.4 创建一个包含文件各行内容的列表

使用with关键字时,open()返回的文件对象只在with代码块内可用,如果要在with代码块外访问文件的内容,可在with代码块内将文件的各行存储在一个列表中,并在with代码块外使用该列表:可立即处理文件的各个部分,也可以推迟到程序后面再处理。

file_path = 'D:/desktop/test1.txt'
with open(file_path) as file_object:
    lines = file_object.readlines() //从文件中读取每一行,并将其存储在一个列表中,列表被赋值给lines
for line in lines: //使用for循环打印lines中的各行,因为lines的每个元素都对应于文件中的一行,所以输出与文件内容完全一致
    print(line.rstrip())
1.5 使用文件的内容

创建一个字符串,它包含文件中存储的所有数字,且没有任何空格:

file_string = ''
for line in lines:  //这里的lines是1.4中的lines
    file_string+=line.rstrip()
print(file_string)
print(len(file_string))

读取文本文件时,python将其中的所有文本都解读为字符串。如果读取的是数,并要将其作为数值使用,就必须使用函数int()将其转换为整数或使用函数float()将其转换为浮点数。

只想打印小数点后50位时:
print(f"{file_string[:52]}...")
替换:
message.replace('dog','cat')

2. 写入文件

通过将输出写入文件,及时关闭包含程序输出的终端窗口,这些输出也依然存在:

  • 在程序结束运行后查看数据
  • 分享输出文件
  • 编写程序将输出读取到内存中并进行处理
2.1 写入空文件

要将文本写入文件,首先要打开一个文件

filename = 'D:/desktop/test1.txt' 
with open(filename,'w') as file_object: //open()提供了两个实参,第一个是要打开文件的名称,第二个实参是('W'),表示写入模式。

    file_object.write("hehehe")
writ() 不会在写入的文本末尾添加换行符,要想让字符串都单独占一行,需要在方法调用write()中包含换行符。
file_object.write("hahahah\n")

‘w’ 写入模式
‘r’ 读取模式
’a’ 附加模式 :以附加模式打开文件时,python不会再返回文件对象前清空文件的内容,而是将写入内容添加到文件末尾,如果指定文件不存在,python将会创建一个空文件。
with open(filename,'a') as file_object: file_object.write("xixixi")
‘r+’ 读写模式
如果省略了模式实参,python将以默认的只读模式打开文件

如果要写入的文件不存在,函数open()将自动创建它,然而,以写入模式打开文件时,如果指定文件存在,python将在返回文件对象前清空该文件的内容

python只能将字符串写入文本文件。要将数值数据存储到文本文件中,必须先使用函数str()将其转换为字符串格式。

练习:提示用户输入名字,用户做出响应后,将名字写入指定文件中。
filename1='name.txt' //如果文件不存在,系统会自动创建
inname = input("please input your name:")
with open(filename1,'a') as file_object:
    file_object.write(inname)

3. 异常

try:
    print(5/0)
except ZeroDivisionError: //try代码块异常将会执行此代码块
    print("you can't divide by zero")
    //python 中有pass 语句,用于让python在代码块中什么都不要做
else//依赖try代码块成功执行的代码都放在else里面
    ...
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值