之前我们知道了打开文件之后可以使用read(byte_num)和write(data)两个方法来对我们的文件进行读取操作,并通过对比知道了文件的打开模式不同,也会对我们的文件读写造成一定的影响。实际上,每个文件对象都有一个属性:“文件读写位置”,这个属性能够记录我们当前读写文件的位置。文件读写位置默认为0,即读写位置默认在文件头部(开头)。在python也提供了相关的方法,接下来我们去进行逐一认识:

目录

一,文件的定位读写

1,tell方法

2,seek方法

二,os模块---文件管理

1,remove(file_name)

2,rename方法

3,getcwd方法

一,os模块---目录管理

 1,mkdir方法

2,rmdir方法

3, listdir方法

二,os.path模块 

1,isdir方法

 2,isfile方法

 3,exists方法


一,文件的定位读写

1,tell方法

tell方法用于获取文件当前的读写位置。

if __name__ == '__main__':
    context="...hei,The computer grade examination is divided into four levels. "
    with open(r"F:\novels\English\textdemo.txt",'r+',encoding="utf8") as f:
        print(f.tell())  # 获取文件读取的位置
        print(f.read(3))   # 读数据并打印输出[无法打印出来]
        print(f.tell())   # 获取文件读取的位置

python 获取磁盘盘符 python获取文件位置_python 获取磁盘盘符

 从上面的代码中,我们可以发现,当我们没有对文件进行操作的时,tell方法返回的结果为0,表示没有对文件进行读取操作,但是当我们在对文件进行读操作后,我们的读写位置就会发生改变。使用tell方法后可以看到读写改变了多少位置(即多少 字节)。

2,seek方法

seek方法的格式为:seek(offset,from)--offset表示偏移量,即读写位置需要移动的字节数;from表示是从哪里开始偏移,我们可以是从文件开头(使用数字0表示),当前读写位置(使用数字1表示),文件末尾(使用数字2表示)三个读写位置开始。

我们不管是使用read()还是write()方法,它们的都会在固定的位置进行读取文件,如read是按顺序从头开始读取数据,write()是将文件覆盖,从头开始写入数据等。

现在我们有一个文件,内容如下:

python 获取磁盘盘符 python获取文件位置_python 获取磁盘盘符_02

如果我们没有使用seek方法来控制文件的读写位置,而是直接使用read方法进行读取数据(文件打开方式为:r+)的话,那么将会从头开始打印我们的数据:

if __name__ == '__main__':
    with open(r"F:\novels\English\textdemo.txt",'r+',encoding="utf8") as f:  # 以更新的模式打开文件
        print(f.read())  # 读取文件

python 获取磁盘盘符 python获取文件位置_python 获取磁盘盘符_03

 但是我现在不想要从头开始读取数据,而是想要从指定的偏移量开始,那么此时我们就可以使用seek方法来实现文件的随机读写,例如,我们想要从第3个字节数的位置开始读数据(偏移量从文件开头计数):

if __name__ == '__main__':
    with open(r"F:\novels\English\textdemo.txt",'r+',encoding="utf8") as f:  # 以更新的模式打开文件
        f.seek(3,0)  # 移动到文件开头的第三个字节数位置
        print(f.read())  # 读取文件

python 获取磁盘盘符 python获取文件位置_python 获取磁盘盘符_04

如上使用seek方法修改读取数据偏移量后,可以看到我们读取数据的位置就不是从文件开头开始,而是从指定的位置读取数据。

 之后,经过多行代码测试,我发现,如果使用seek方法进行修改写入数据的位置操作的话,不管我写的offset偏移量是多少,它都不会起作用,使用w+打开模式的方式依旧是全部覆盖写入数据,a+模式的依旧是在文件的末尾追加数据。所以推荐将seek方法与read方法搭配使用最好。

二,os模块---文件管理

经常使用电脑创建文件(或目录),修改文件(或目录),删除文件(或目录)的都应该知道,文件和目录是两个不同的概念,在windows系统下,目录是文件的集合,本质上也是一种文件,但是我们习惯性的把可以放置了多个文件的文件叫做目录。对于文件和目录管理和操作的方法,在python中的os模块下提供了文件或者是目录操作的方法,现在我们去了解常用的几种方法。

在使用以下方法之前需要注意:因为文件或者是目录有关的操作方法都是放到os模块里面的,所以我们在使用这些方法之前都需要导入os模块:import os

1,remove(file_name)

remove(file_name)该函数可以用来删除文件(删除已经存在的文件):

python 获取磁盘盘符 python获取文件位置_os模块_05

 接着我们去调用os模块下的remove方法,来删除dd.txt文件:

import os
if __name__ == '__main__':
    os.remove(r"C:\Users\ASUS\Desktop\dd.txt")

python 获取磁盘盘符 python获取文件位置_os模块_06

如上,我们可以看到dd.txt文件已经删除成功。

2,rename方法

rename函数可以更改我们的文件名,该函数依旧要求目标文件存在,格式:rename(old_file_name,new_file_name);

如下,我们有一个名为hhh.txt的文件,现在我们还没有运行程序,它的名字依旧是hhh.txt:

python 获取磁盘盘符 python获取文件位置_pycharm_07

 现在我们去运行程序,可以看到文件成功的改名成功:

# -*- encoding: utf-8 -*-
import os
if __name__ == '__main__':
    old_file_name=r"C:\Users\ASUS\Desktop\hhh.txt"  # 计算机上存在的文件(原来的文件名)
    new_file_name=r"C:\Users\ASUS\Desktop\hei.txt"  # 新的文件名
    os.rename(old_file_name,new_file_name)  # 修改文件名

python 获取磁盘盘符 python获取文件位置_os模块_08

 相信大家发现了,我们在不管是删除文件名还是修改文件名都需要将它的绝对路径写出来,不然我们的程序就不知道我们想要修改的文件在哪个盘符及哪个目录下,但是每次都写上那么一大串的路径,像删除目录的remove方法还行,只需要写一次,但是我们的rename方法就需要写两次,这样无疑是很烦的,虽然可以cv复制粘贴,但是我们的代码看上去不是那么简洁与美观,因此在python中存在着一种方法:chdir(dir)。该方法可以直接更改我们的默认目录,将我们程序的工作目录转到dir下,之后我们就不需要在文件名之前加上那么一大长串的目录。现在我们使用代码去一探究竟:

import os
if __name__ == '__main__':
    os.chdir(r"C:\Users\ASUS\Desktop")  # 转工作目录
    os.rename("hei.txt","hello.txt")  # 修改文件名

python 获取磁盘盘符 python获取文件位置_开发语言_09

  为什么我们要去更改工作目录?相信大家还记得在使用pycharm创建项目的时候,有一个选项,可以选择我们项目的工作目录,因为我不喜欢将项目放在c盘(好吧,实话说,主要是因为怕占c盘空间),那个使用我就将项目的工作目录指定在了d盘下,但是因为我电脑桌面上的所有快捷键及文件都是在c盘的,所以我在操作桌面的文件时,就不得不去指定一大长串的目录。但是使用了chdir方法之后,只需要在一开始转工作目录,后面就可以直接操作该目录下的所有文件。是一个极其方便的方法。

3,getcwd方法

如果不知道自己当前项目的工作目录在哪的,可以使用python中的os模块提供的getcwd方法来进行获取,getcwd方法不需要我们传入任何参数,直接调用即可:

# -*- encoding: utf-8 -*-
import os
if __name__ == '__main__':
    print(os.getcwd())    # 获取pycharm默认的工作目录

python 获取磁盘盘符 python获取文件位置_os模块_10

 其实也可以不使用getcwd方法,我们的pycharm是个比较智能的开发环境,它已经为我们在控制台那里输出了我们当前项目的工作路径:

python 获取磁盘盘符 python获取文件位置_python 获取磁盘盘符_11

一,os模块---目录管理

 1,mkdir方法

mkdir方法可以用于创建新的目录(即文件夹,可以用于存放多个文件):

python 获取磁盘盘符 python获取文件位置_python_12

 之后我们去运行程序,来创建新的目录:

# -*- encoding: utf-8 -*-
import os
if __name__ == '__main__':
    os.chdir(r"C:\Users\ASUS\Desktop")  # 转工作目录
    os.mkdir("dir1")   # 创建目录

python 获取磁盘盘符 python获取文件位置_开发语言_13

如上,我们可以看到使用了mkdir方法之后,我们成功的创建了名为dir1的目录。

2,rmdir方法

有创建自然就有删除,在python中删除目录的方法为:rmdir(dir):

# -*- encoding: utf-8 -*-
import os
if __name__ == '__main__':
    os.chdir(r"C:\Users\ASUS\Desktop")  # 转工作目录
    os.rmdir("dir1")  # 删除dir1目录

python 获取磁盘盘符 python获取文件位置_python_14

3, listdir方法

listdir方法可以用于获取指定目录下的所有文件,获取到指定文件后,我们就可以对这些目标文件进行批量操作,比方说统一改成以a开头的文件名等。我们先来简单的认识它的使用:

# -*- encoding: utf-8 -*-
import os
if __name__ == '__main__':
    os.chdir(r"F:\迅雷云盘\myfile\logo")  # 转工作目录
    list_file=os.listdir('./') # 获取当前工作目录下的所有文件
    print(list_file)  # 打印输出结果

python 获取磁盘盘符 python获取文件位置_pycharm_15

 如上,通过输出结果,我们可以看到,listdir方法返回的结果为一个列表类型的数据,之后如果我们想要对其列表里面的数据进行操作的话使用for循环遍历即可。

二,os.path模块 

如果我们想要知道我们在操作的文件是什么类型的,我们还是得需要os模块,只不过这一次我们需要在使用的对应的方法前面加上path包(模块) 。接下来我们去了解常用的几个方法。

1,isdir方法

isdir方法用于判断该文件对象是否为一个目录,如果是的话返回true,反之则为false。如下,我们还是使用之前chdir方法跳转到的工作目录,因为里面的文件类型都是文件,没有目录,所以我手动的去创建了一个目录dir01:

python 获取磁盘盘符 python获取文件位置_pycharm_16

 接下来我们使用os.path.isdir(dir)方法进行判断我们的dir01是否为目录,毫无疑问的是返回结果为true:

# -*- encoding: utf-8 -*-
import os
if __name__ == '__main__':
    os.chdir(r"F:\迅雷云盘\myfile\logo")  # 转工作目录
    print(os.path.isdir("dir001"))  # 判断dir001是否为目录

python 获取磁盘盘符 python获取文件位置_os模块_17

 如果觉得os.path前缀看起来不大简洁,那么我们给该模块起别名,之后再使用该别名来代表我们的模块来调用相应的方法即可,如下:

import os
import  os.path as pathdemo  # 给别名
if __name__ == '__main__':
    os.chdir(r"F:\迅雷云盘\myfile\logo")  # 转工作目录
    print(pathdemo.isdir("dir001"))  # 判断dir001是否为目录

python 获取磁盘盘符 python获取文件位置_开发语言_18

 2,isfile方法

isfile方法和isdir方法差不多,返回值都是布尔类型的数据。但是isfile用于判断该文件类型是否为文件,如下我们判断的对象依旧是dir001(文件类型为目录),结果应该为false:

# -*- encoding: utf-8 -*-
import os
import  os.path as pathdemo
if __name__ == '__main__':
    os.chdir(r"F:\迅雷云盘\myfile\logo")  # 转工作目录
    print(pathdemo.isfile("dir001"))  # 判断dir001是否为文件类型

python 获取磁盘盘符 python获取文件位置_开发语言_19

 3,exists方法

exists方法可以用于判断该文件(可以是文件,也可以是目录)是否存在。我们在判断应该一个文件的文件类型是否为文件或者是目录的前提是该文件是存在的,如果不存在,程序将会报错,提示我们该文件不存在。我们还是使用dir001作为判断的对象,现在我们使用代码来看一下具体的使用及效果:

# -*- encoding: utf-8 -*-
import os
import  os.path as pathdemo
if __name__ == '__main__':
    os.chdir(r"F:\迅雷云盘\myfile\logo")  # 转工作目录
    print(pathdemo.exists("dir001"))  # 判断dir001是否存在

python 获取磁盘盘符 python获取文件位置_pycharm_20

 如上就是关于文件和目录的操作及管理的相关内容。