Python 文件的相关操作

122 阅读5分钟


失与的头像

python文件的相关操作

文件的意义在于将电脑中的各种数据内容进行持久化保存,方便下次直接使用,而不必重新制作一份,既省时又省力 文件的基本操作:

  1. 打开文件
  2. 读写文件
  3. 关闭文件

①:打开文件使用open方法,其格式如下所示:

a = open('name','mode',encoding='编码格式') # a是一个任意命名的字符串,name代表文件的路径和名字,mode代表访问文件的方式,该方式有很多种,最后的参数是编码格式
# 示例:打开同当前目录下的python.txt 文件,打开为只读模式,编码使用utf-8
f = open('python.txt', 'r', encoding='utf-8')

②:读取文件有三种方法: read()方法、readline()方法、readlines()方法 这些方法都是有返回值的,并且返回值都是文件的内容,所以要使用变量接住他们的内容

passage1 = f.read([读取文件字符的长度])  # 若括号内不填参数,则默认读完整个文件并返回给passage变量形成一个字符串,访问结束后文件指针指向结尾,若此时再次读取,将读取不到任何内容。

passage2 = f.readline() # 此方法只读取文件的一行,所以往往要搭配while True:语句使用,返回类型为字符串

passage3 = f.readlines()  # 此方法一次性将文件内的所有内容写入一个列表中,并将此列表返回,这种方法若遇到体量较大的文件,容易致使程序崩溃卡死,只适用于小型文件的读取。



③:关闭文件 f.close()即可 ,该方法无返回值

第二个问题:我们该如何使用电脑代码定位到我要访问的文件?访问的文件不在同一个目录怎么办?

在解释这个问题之前,我们首先要了解一个概念,就是当前程序的工作地址,其实当前程序也同样被电脑识别为一个文件,python文件则后缀为.py文件,C语言则后缀为.c,以此类推。 然后,在计算机中我们将寻找文件位置的代码称之为路径, 路径可以分为两种:

  1. 绝对路径
  2. 相对路径

①:绝对路径: 什么叫绝对路径,将计算机内存比作一栋宿舍楼,假设一共有3栋宿舍楼,A栋、B栋、C栋,每栋楼每层宿舍的编号都是相邻编号,例如201和202是相邻的,那么给计算机一个地址:A栋201,那么计算机就先从A栋一楼开始找,然后找到201,再给计算机一个地址,A栋202,计算机又从A栋一楼进来然后开始找,计算机根本不知道201和202是相邻的,这就叫绝对路径。计算机一般会有几个盘,这几个盘就是所谓的“宿舍楼”。

②:相对路径: 同上假设,计算机已经找到了201并在201待了一会儿,此时我们发出指令,告诉计算机只需要往隔壁走一间就是202,是不是就方便许多?201就是程序的工作地址。

python文件中的寻址解决办法:

举例如图:

images.png我们可以看到,static文件夹和99乘法表都在pythonProject文件夹下,static文件夹内部还有两个文件,一个是images,一个是数据容器.py,那么假设我正在对99乘法表进行操作,意思就是当前的文件工作地址在99乘法表.py内,我该如何去访问images文件呢?

可以使用绝对路径: f = open('E:/pythonProjtct/static/images','r',encoding='utf-8')

相应的相对路径就是: f = open('static/images.txt','r',encoding='utf-8')

或者是: f = open('./static/images.txt','r',rncoding='utf-8')

工作地址在数据容器.py时想要通过相对路径访问99乘法表文件,则是如下代码: f = open('../99乘法表.py','r',encoding='utf-8')

若都在一个目录下,想要互相访问直接输入名称即可。

小总结:

当我们用相对路径对文件进行访问时,若为同级目录下的文件,直接在路径处输入想要访问的文件名字就好,或者是./

若为下级文件,则通过/索引到下级目录中去访问,若为上级文件,则通过../向上索引,若是上级文件的上级,则用../../即可

python中文件的进阶操作

  1. 文件的备份方法
  2. OS模块实现文件和文件夹的相关操作

①:文件备份:示例如下

oldname = input('输入你要备份的文件名称:')  
index = oldname.rfind('.') # 寻找.号最后一次出现的位置  
newname = oldname[:index] + '[备份]' + oldname[index:]  
print(newname)  
f = open(oldname, 'rb',) # 打开老文件  
n = open(newname, 'wb',) # 若改文件名不存在,则创建一个新的文件  
while True:   # 判断文件是否读完
content = f.read(1024) # 以1024b为单位(1k)读取内容  
if not content:  
break  
n.write(content)  
f.close()  
n.close()

共出现了rfind()方法和wb,rb的文件模式,代表write binary和read binary(支持二进制读写,音频,视频,图片等读写)文件有很多模式,这里不做赘述

②:用OS模块实现文件的相关操作

先介绍相关方法:

os内有多达几十个方法,这里只介绍简单常用的几种

os.mkdir() 创建一个文件夹
os.getcwd()获取当前程序工作目录
os.chdir() change directory, 切换目录
os.listdir() 以列表形式展现当前工作文件夹所有的文件夹名称
os.rmdir() 移除目录,删除文件夹,只能删除空文件夹

示例:

# 使用OS模块首先要导入OS包
import os
print(os.getcwd()) # 获取当前目录工作位置 
os.chdir('static')  # 将工作目录调整到static目录下
if not os.path.exists('text'):   # 如果text文件不存在目录中,则创建一个text文件
    os.mkdir('text')
file1 = os.listdir()  # 以列表的形式返回当前工作目录下的所有文件名
os.rmdir('text')  # 删除当前工作目录下名为text的文件

制作不易,多多支持!