当前位置: 首页 > 后端技术 > Python

小白学Python(18):基本文件操作

时间:2023-03-26 02:08:05 Python

人生苦短,我选择Python上一篇传送门小白学Python(一):入门小白学Python(二):基本数据类型(上)小白学Python(三):基本数据类型(下)Python初学者入门(四):变量的基本操作Python入门入门(五):基本运算符(上)Python入门入门(六):基本运算符(下)小白学习Python(7):基本流程控制(上)小白学习Python(8):基本流程控制(下)小白学习Python(9):基本数据结构(列表)(上)小白学习Python(10):数据结构基础(列表)(下)小白学习Python(11):数据结构基础(元组)小白学习Python(12):数据结构基础(字典)(上)小白学习Python(13):数据结构基础(字典)(下)小白学Python(十四):数据结构基础(集)(下)小白学Python(十五):数据结构基础(集)(下)2)小白学习Python(16):基本数据类型(函数)(上)小白学习Python(17):基本数据类型(函数)(下)绝对路径和相对路径在介绍文件操作之前,我们先介绍两个概念,绝对路径和相对路径。先看百度下百度的解释:绝对路径:指目录下的绝对位置,直接到目标位置,通常是从盘符开始的路径。完整描述文件位置的路径是绝对路径。相对路径:相对路径是指由该文件所在的路径引起的与其他文件(或文件夹)的路径关系。不知道各位同学看懂没有,如果看不懂,我再举个栗子加深大家的理解。绝对路径比如我们要描述Demo.py的绝对路径,那么就是:F:/project/python-learning/base-data-def/Demo.py。相对路径相对路径是描述当前位置相对于目标位置的路径。例如,我们当前的路径是F:/project/python-learning/。我们还是要描述上面的Demo.py,所以它的相对路径是./base-data-def/Demo.py。打开文件Python为我们提供了内置函数open()来打开文件。常用语法:open(file,mode='r')完整语法:open(file,mode='r',buffering=-1,encoding=None,errors=None,newline=None,closefd=True,opener=None)参数说明:file:必填,文件路径(相对或绝对路径)。mode:可选,文件打开模式buffering:设置缓冲区编码:一般使用utf-8errors:错误级别newline:区分换行符closefd:传入文件参数类型mode参数常用值:mode描述t文本模式(默认)。x写模式,新建一个文件,如果文件已经存在,会报错。b二进制模式。+打开文件进行更新(可读和可写)。r以只读方式打开文件。文件指针将放置在文件的开头。这是默认模式。rb以二进制格式打开一个只读文件。文件指针将放置在文件的开头。这是默认模式。一般用于图片等非文本文件。r+打开一个文件进行读写。文件指针将放置在文件的开头。rb+以二进制格式打开文件进行读写。文件指针将放置在文件的开头。一般用于图片等非文本文件。w打开只写文件。如果文件已经存在,则从头开始编辑文件,即删除原来的内容。如果该文件不存在,则创建一个新文件。wb以二进制格式打开一个只写文件。如果文件已经存在,则从头开始编辑文件,即删除原来的内容。如果该文件不存在,则创建一个新文件。一般用于图片等非文本文件w+打开一个文件进行读写。如果文件已经存在,则从头开始编辑文件,即删除原来的内容。如果该文件不存在,则创建一个新文件。wb+以二进制格式打开文件进行读写。如果文件已经存在,则从头开始编辑文件,即删除原来的内容。如果该文件不存在,则创建一个新文件。一般用于图片等非文本文件。a打开文件进行追加。如果文件已经存在,文件指针将放在文件末尾。也就是说,新内容将写在现有内容之后。如果该文件不存在,则创建一个新文件用于写入。ab以二进制格式打开文件以进行追加。如果文件已经存在,文件指针将放在文件末尾。也就是说,新内容将写在现有内容之后。如果该文件不存在,则创建一个新文件用于写入。a+打开文件进行读写。如果文件已经存在,文件指针将放在文件末尾。该文件将以追加模式打开。如果该文件不存在,则新建一个文件进行读写。ab+以二进制格式打开文件以进行追加。如果文件已经存在,文件指针将放在文件末尾。如果该文件不存在,则新建一个文件进行读写。只说不练假动作,这是我们的第一个例子:str1=open('F:/project/python-learning/base-data-def/Demo.py',mode='r').read()print(str1)打印结果我就不贴了,但是我们之前文章的示例代码打印是正常的。编码格式根据编码格式的不同,文件可分为文本字符和二进制字节。我们每天看到的都是文本字符,但是文本字符在计算机中存储时会被转换成二进制字节。这时候就要考虑编码问题了。我们来看一下转换的示例图:值得注意的是,在Python3中,文件的默认编码方式是UTF-8,文本字符常用的编码有ASCII和Unicode。说了这么多,我们来看一个示例代码:str2='好好学习,天天进步'print(type(str2))a=str2.encode('utf-8')print(type(a))print(a.decode('utf-8'))打印结果如下:类型变为byte。如果我们像编码gbk一样对上面的a进行解码呢?print(a.decode('gbk'))的结果如下:Traceback(mostrecentcalllast):File"F:/project/python-learning/base-file/Demo.py",line10,inprint(a.decode('gbk'))UnicodeDecodeError:'gbk'codeccan'tdecodebyte0x8ainposition26:incompletemultibytesequence告诉我们不能使用gbk进行解码操作。这其实很容易理解。比如我们把中文翻译成英文(encoding),然后我们要通过日文翻译把英文翻译回中文(decoding),那这个日文翻译肯定叫你恶心。在OS模块中,我们介绍了通过内置函数对文件进行操作,我们也可以通过OS模块以更简单的方式对文件进行操作。操作系统模块是与操作系统相关的模块。为了演示,首先创建一个test.txt文件。首先我们打开这个文件:importosos.chdir('F:/project')file=open('test.txt')读取这个文件并打印:print(file.read())结果如下:公众号:Geekexcavator然后我们在下面添加一些内容:file.write('专注于公众号,好好学习,天天进步')发现执行错误:Traceback(mostrecentcalllast):File"F:io.UnsupportedOperation:notwritable从报错信息可以看出是我们当前的读权限问题,因为我们读的时候是只读权限,不能写,所以稍微修改一下上面读取文件的代码:importosos.chdir('F:/project')file=open('test.txt',mode='a+')file.write('\n关注公众号,好好学习,天天进步')执行完成后,我们再看看我们的测试文件:写入成功了。我们来测试一个有趣的事情,如果我们读取同一个文件两次会怎么样?importosos.chdir('F:/project')file=open('test.txt')print(file.read())print(file.read())打印结果为e如下:微信公众号:极客挖矿请关注公众号,好好学习,天天向上。我们明明把代码打印了两次,为什么只显示一次?因为read()读取的是所有的内容,读完之后,光标在最后,再往后读的话,肯定是读不完内容的。好了,本文的内容到此结束,希望各位同学能够动手实践示例代码。示例代码本系列所有代码编辑器都会放在代码管理仓库Github和Gitee上,方便大家使用。示例代码-Github示例代码-Gitee如果我的文章对你有帮助,请扫码关注作者的公众号:获取最新干货推送:)