Python文件操作:正确使用绝对路径打开文件,避免路径错误困扰
创始人
2024-12-28 01:15:56
0 次浏览
0 评论
Python用open打开文件,输入完整路径可以打开,直接文件名不能打开,为什么?
open函数中的默认文件名指定在当前目录中搜索文件。
如果当前目录中不存在,则会报错。
日常使用,建议写绝对路径(完整路径)
当前目录下没有.txt文件。
下面是错误信息。
我的D盘上有一个.txt文件,我写下了绝对路径
withopen()asf等效f=open()
程序中会使用第一个方法,完成后自动释放内存。
不需要写f.close()。
否则用法是一样的
python怎么打开文件模式
读写文件是最常见的IO操作。Python内置了读写文件的函数,其用法与C兼容。
在读写文件之前,我们首先要了解磁盘读写文件的功能是操作系统提供的。
现代操作系统不允许普通程序直接操作磁盘。
因此,读写文件需要操作系统打开一个A文件对象(通常称为文件描述符),然后通过接口从这个文件对象中读取数据(读文件)或者向这个文件对象写入数据(写文件)由操作系统提供。
要读取文件,请以文件读取模式打开文件对象。
使用Python内置的open()函数,传入文件名和标识符:>>>f=open('/Users/michael/test.txt','r')标识符'r'表示读取,所以我们成功了打开了一个文件。
如果文件不存在,open()函数将抛出IOError并给出错误代码和详细信息,告诉您文件不存在:>>>f=open('/Users/michael/notfound.txt','r')Traceback(mostrecentcalllast):File"
Python将内容读入内存并使用str对象。
代表:>>>f.read()'Hello,world!'最后一步是调用close()方法来关闭文件。
文件使用后必须关闭,因为文件对象会占用操作系统的资源,而且操作系统可以同时打开的文件数量也是有限的:>>>f.close()由于IOError读写文件时可能会出现错误,一旦发生错误,后续的f.close()将不会被调用。
因此,为了保证无论是否出错都能正确关闭文件,我们可以使用try...finally来实现:try:f=open('/path/to/file','r')print(f.read())finally:iff:f.close()但每次都这样写太麻烦了,所以,Python引入了with语句来自动为我们调用close()方法:withopen('/path/to/file','r')asf:print(f.read())这个和前面的try...finally一样,但是代码更简洁,没有需要调用f.close()方法。
调用read()将立即读取文件的全部内容。
如果文件是10G,内存就会爆。
因此,为了安全起见,您可以重复调用read(size)方法,每次最多读取size字节的内容。
。
另外,调用readline()可以一次读取一行内容,调用readlines()可以一次读取所有内容并逐行返回列表。
因此,您需要根据自己的需要决定如何调用。
如果文件很小,用read()一次性读取是最方便的;如果无法确定文件大小,重复调用read(size)会更安全;如果是配置文件,调用readlines()最方便:forlineinf.readlines():print(line.strip())#用read()方法删除末尾的'\n'file-likeObject对象像open()函数返回的那些在Python中统称为file-likeObject。
除了文件之外,还可以是内存字节流、网络流、自定义流等。
file-likeObject不需要继承具体的类,只需编写一个read()方法即可。
StringIO是在内存中创建的类似文件的对象,通常用作临时缓冲区。
前面提到的二进制文件默认读取的是文本文件,而且是UTF-8编码的文本文件。
要读取二进制文件,例如图片、视频等,请以'rb'模式打开文件:>>>f=open('/Users/michael/test.jpg','rb')>>>f.read()b'\xff\xd8\xff\xe1\x00\x18Exif\x00\x00...'#字节字符的十六进制表示编码。
要读取非UTF-8编码的文本文件,需要给open()函数传入编码参数,例如读取GBK编码的文件:>>>f=open('/Users/michael/gbk.txt','r',encoding='gbk')>>>f.read()'test'遇到一些非标准编码的文件,可能会遇到UnicodeDecodeError,因为里面可能混入了一些非法编码的字符这文本文件。
在这种情况下,open()函数还接受接收一个errors参数,指示如何处理编码错误。
最简单的方法就是直接忽略:>>>f=open('/Users/michael/gbk.txt','r',encoding='gbk',errors='ignore')写文件和读文件是同样,唯一的区别是调用open()函数时,传入标识符'w'或'wb'来表示写入文本文件或写入二进制文件:>>>f=open('/Users/michael/test.txt','w')>>>f.write('Hello,world!')>>>f.close()您可以调用write()重复写入文件,但一定要调用f.close()来关闭文件。
当我们写入文件时,操作系统往往不会立即将数据写入磁盘,而是缓存在内存中,等空闲时慢慢写入。
只有调用close()方法时,操作系统才保证所有未写入的数据都会写入磁盘。
忘记调用close()的后果是,只有部分数据可能被写入磁盘,其余数据都会丢失。
因此,为了安全起见,最好使用with语句:withopen('/Users/michael/test.txt','w')asf:f.write('Hello,world!')使用以下命令写入文本文件具体的编码,请给出open()函数传入encoding参数,自动将字符串转换为指定的编码。
细心的孩子会发现,以'w'模式写入文件时,如果文件已经存在,就会直接覆盖(相当于删除并写入新文件)。
如果我们想追加到文件末尾怎么办?以传入'a'以追加模式写入。
所有模式的定义和含义请参考Python官方文档。
相关文章
Python编程级别详解与认证指南
2024-12-19 18:38:26Python字符串转列表:两种高效转换方...
2024-12-15 01:18:44Python循环控制:break与con...
2024-12-30 18:33:34Python列表添加元素技巧:三种方法详...
2024-12-16 04:42:00MySQL锁死问题解决方案及优化技巧
2024-12-16 20:51:41Python数据分析基础:Numpy一维...
2024-12-31 09:25:13Python开发利器:新手必看!PyCh...
2024-12-28 04:07:35Python整数类型(int)深度解析与...
2024-12-19 04:18:43漯河计算机培训:达乃教育Python与少...
2024-12-25 02:17:36Python列表添加元素技巧:3种方法详...
2024-12-16 17:18:34最新文章
12
2025-01
12
2025-01
12
2025-01
12
2025-01
12
2025-01
12
2025-01
12
2025-01
12
2025-01
12
2025-01
12
2025-01
热门文章
1
Python中的format()方法:字...
formatformat在python中的含义2222.22E+00Format...
2
Python编程入门:全面解析Pytho...
python的基本语法基本的Python语法如下:1.变量的定义。在编程语言中,...
3
Python字符串大小写转换方法全解析
python中字母的大小写转换怎么实现?在Python中,大小写转换由内置函数处...
4
Python字典:轻松获取最小值键与计算...
python在一个字典里,返回值最小元素对应的键,救解在Python字典中,如果...
5
Python字符串去重空格:strip(...
Python去除字符串中空格(删除指定字符)的3种方法在Python编程中,处理...
6
Python数组元素数量计算技巧分享
Python输出数组有多少个元素?简介:在本文中,首席CTO笔记将向您介绍Pyt...
7
简述python中pass的作用
pass语句的作用在许多编程语言中,包括Python;PASS语句用于在代码块中...
8
Python def 关键字详解:函数定...
def是什么意思编程?戴夫是什么意思?def是Python中的函数定义关键字,用...
9
python不区分大小写的方法
Python字符串不区分大小写在Python中,字符串操作默认区分大小写。但有时...
10
Python字典操作全解析:添加、修改、...
Pythondict字典基本操作(包括添加、修改、删除键...