• python 文件和目录相关操作


    python 文件和目录相关操作

    文件夹和文件路径

    绝对路径: 是从根目录开始描述的路径。

    相对路径:相对于当前目录

    .一个点,表示的是当前文件夹;..两个点表示的是上一层文件夹。

    os模块

    在 Python 中操作文件路径,使用 os 模块,os.path 模块是 os 模块内部的一个子模块,首先导入该模块。

    import os
    
    • 1

    通过os模块提供的通用变量可以获取与系统有关的信息。常用的变量有:

    name:用于获取操作系统的类型。

    linesep:用于获取当前操作系统上的换行符。

    sep:用于获取当前操作系统所使用的路径分隔符。

    os模块提供的一些操作目录的函数

    • getcwd() 返回当前的工作目录
    import os
    print(os.getcwd())
    
    • 1
    • 2
    • chdir(path)把path设置为当前工作目录

    目录/文件操作

    • mkdir(path [,mode])创建目录
    os.mkdir(path, mode=0o777) # mode:用于指定数值模式,默认值为0o777。
    
    • 1
    • makedirs(path1/path2…[,mode])创建多级目录

    • rmdir(path)删除目录,只有当要删除目录为空时才起作用。

    • removedirs(path1/path2……)删除多级目录

    • os.walk(top[, topdown][, onerror][, followlinks])遍历目录树

      '''
      top:指定要遍历内容的根目录。
      topdown:可选参数,用于指定遍历的顺序。若值为True,表示自上而下遍历(先遍历根目录),若值为 False,表示自下而上遍历。(默认值为True)
      onerror:可选参数,用于指定错误处理方式,默认忽略,使用时指定一个错误处理函数即可。
      followlinks:可选参数,默认情况下将参数值设为True。
      
      返回值:返回三个元素(dirpath, dirnames, filenames)
      dirpath: 字符串; dirnames: 列表 ; filenames: 列表
      '''
      
      • 1
      • 2
      • 3
      • 4
      • 5
      • 6
      • 7
      • 8
      • 9
      import os   # 导入os模块
      path = "C:\\demo"       # 指定要遍历的根目录
      print("【",path,"】 目录下包括的文件和目录:")
      for root, dirs, files in os.walk(path, topdown=True):  # 遍历指定目录
          for name in dirs:            # 循环输出遍历到的子目录
              print(">",os.path.join(root, name))
          for name in files:           # 循环输出遍历到的文件
              print("<",os.path.join(root, name))
      
      • 1
      • 2
      • 3
      • 4
      • 5
      • 6
      • 7
      • 8
    • remove(path) 删除文件

      import os
      path = "a.txt"        #目标文件
      if os.path.exists(path):    #判断文件是否存在
          os.remove(path)        #存在即删除
          print("删除完毕")
      
      • 1
      • 2
      • 3
      • 4
      • 5
    • rename(src,dst) 重命名文件和目录

    • stat(path)获取文件信息

      '''
      stat()函数返回值是一个对象。
      st_mode:         保护模式
      
      st_ino:             索引号
      st_dev:            设备名
      st_nlink:           硬链接号(被连接数目)
      st_uid:              用户ID
      st_gid:              组ID
      st_size:            普通文件以字节为单位的大小
      st_atime:          最后一次访问时间
      st_mtime:         最后一次修改时间
      st_ctime:          最后一次状态变化时间。系统不同,返回结果也不同。例如,Windows下返回的是文件的创建时间。
      '''
      
      • 1
      • 2
      • 3
      • 4
      • 5
      • 6
      • 7
      • 8
      • 9
      • 10
      • 11
      • 12
      • 13
      • 14

    获取目录下的内容:

    • listdir(path)返回指定路径下的文件和目录信息

      import os
      print(os.listdir("."))
      
      • 1
      • 2

    os.path模块

    os.path模块提供的一些操作目录的函数

    获取路径:

    • abspath(path)用于获取文件或目录的绝对路径

      import os
      
      ret = os.path.abspath("demo4.py")
      print(ret)
      
      • 1
      • 2
      • 3
      • 4
    • relpath(path,start) 用于获取相对于start的路径,start默认是当前路径

      import os
      
      ret = os.path.relpath("D:\\")
      print(ret)
      
      • 1
      • 2
      • 3
      • 4

    检查路径

    • exists(path) 如果 path 文件或文件夹存在返回 True,否则返回 False;
    • isabs(path) path 是绝对路径返回 True,否则返回 False;
    • isdir(path) path 是文件夹返回 True,否则返回 False;
    • isfile(path) path 是文件返回 True,返回 False;

    路径的拼接和分割

    • join(path,name)将目录与目录或者文件名拼接起来
    • splitext()分离文件名和扩展名
    • basename(path)从一个目录中提取文件名
    • dirname(path)从一个路径中提取文件路径,不包括文件名

    文件读写

    创建和打开文件

    创建或打开指定文件并创建文件对象可以使用open()方法,基本语法如下

    '''
    file :被创建的文本对象
    filename:要创建或打开文件的名称,需要使用单引号或双引号括起来。如果要打开文件和当前文件在同一目录下,那么直接写文件名即可,否则则需要指定完整路径。
    mode:可选参数,用于指定文件的打开模式。参数表如下。
    '''
    file = open(filename[,mode[,buffering]])
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    file = open('message.txt','w',encoding="utf-8")
    
    • 1
    • buffering:可选参数,用于指定读写文件的缓冲模式,如果值为0,则表示不缓存;如果值为1,则表示缓存;如果值大于1,则表示缓冲区的大小,默认为缓冲模式。
    • mode 的参数值:
      • r以只读模式打开文件。文件的指针将会放在文件的开头
      • rb以二进制格式打开文件,并且采用只读模式。文件的指针将会放在文件的开头。一般用于非文本文件,如图片、声音等
      • r+打开文件后,可以读取文件内容,也可以写入新的内容覆盖原有内容(从文件开头进行覆盖)
      • rb+以二进制格式打开文件,并且采用读写模式。文件的指针将会放在文件的开头。一般用于非文本文件,如图片、声音等
      • w以只写模式打开文件
      • wb以二进制格式打开文件,并且采用只写模式。一般用于非文本文件,如图片、声音等
      • w+打开文件后,先清空原有内容,使其变为一个空的文件,对这个空文件有读写权限
      • wb+以二进制格式打开文件,并且采用读写模式。一般用于非文本文件,如图片、声音等
      • a以追加模式打开一个文件。如果该文件已经存在,文件指针将放在文件的末尾(即新内容会被写入到已有内容之后),否则,创建新文件用于写入
      • ab以二进制格式打开文件,并且采用追加模式。如果该文件已经存在,文件指针将放在文件的末尾(即新内容会被写入到已有内容之后),否则,创建新文件用于写入
      • a+以读写模式打开文件。如果该文件已经存在,文件指针将放在文件的末尾(即新内容会被写入到已有内容之后),否则,创建新文件用于读写
      • ab+以二进制格式打开文件,并且采用追加模式。如果该文件已经存在,文件指针将放在文件的末尾(即新内容会被写入到已有内容之后),否则,创建新文件用于读写

    关闭文件

    打开文件后要及时关闭,以免造成对文件不必要的破坏,关闭文件时可以使用文件对象的close()方法实现。

    读取文件

    • read(): 读取文件所有内容

      # 文件地址,注意提前在当前目录新建一个 test.txt 文件
      file = "test.txt"
      # 打开文件
      f = open(file, encoding="utf-8")
      # 读取文件全部内容
      read_str = f.read()
      # 关闭文件
      f.close()
      print(read_str)
      
      • 1
      • 2
      • 3
      • 4
      • 5
      • 6
      • 7
      • 8
      • 9
    • for 循环逐行读取文件内容

      # 文件名
      file = "test.txt"
      # 打开文件
      f = open(file, encoding="utf-8")
      # 循环逐行读取
      for line in f:
      	print(line,end="") # 在 txt 文件中,每行的末尾默认有一个换行,print 函数输出也会带一个换行,所以出现 2 个回车符,解决办法,可以使用 print 函数的第二个参数。
      # 关闭文件
      f.close()
      
      • 1
      • 2
      • 3
      • 4
      • 5
      • 6
      • 7
      • 8
      • 9
    • readline() 方法,从文中读取整行信息

      with open('message.txt','r') as file:   # 打开文件
          number = 0   # 记录行号
          while True:
              number += 1
              line = file.readline()
              if line =='':
                  break    # 跳出循环
              print(number,line,end= "\n")  # 输出一行内容
      
      • 1
      • 2
      • 3
      • 4
      • 5
      • 6
      • 7
      • 8
    • readlines() 将数据一次性读取到一个列表中

      # 文件名
      file = "test.txt"
      # 打开文件
      f = open(file, encoding="utf-8")
      # 逐行读取
      data = f.readlines()
      # 关闭文件
      f.close()
      
      print(data)
      # ['line 1\n', 'line 2\n', 'line 3\n', 'line 4']
      
      • 1
      • 2
      • 3
      • 4
      • 5
      • 6
      • 7
      • 8
      • 9
      • 10
      • 11

    with语句

    打开文件后要及时关闭,如果忘记关闭,可能带来意想不到的问题。另外,如果在文件打开时出现了异常,将导致文件不能关闭。为了更好避免这些问题,可以使用with语句,从而在文件处理时,无论是否出现异常都能保证with语句执行完毕后关闭已打开的文件。

    '''
    expression:    用于指定一个表达式,可以是打开文件的open()函数。
    target:用于指定一个变量,并且将expression的结果保存到该变量中。
    with-body:用于指定with语句体,其中可以是执行with语句后相关的一些操作语句。如果不想执行任何语句,可以直接使用pass语句代替。
    '''
    with expression as target:
        with-body
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    file = "test.txt"
    # 打开文件
    with open(file,encoding="utf-8") as f:
        # 读取文件全部内容
        read_str = f.read()
        print(read_str)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    异常捕获

    读写文件的时候,经常会出现一些 IOError 错误异常,建议写在 try…finally… 异常捕获块中,养成良好的编码习惯。

    try:
        # 打开 hello.txt 文件,指定「只读模式」
        hello = open('helo.txt', 'r')
    
        # 使用 readlines(),读取全部信息
        con = hello.readlines()
        print(con)
    
    finally:
        print('出问题了')
        # 最后需要将文件关闭
        hello.close()
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12

    写入文件

    • 使用write()方法进行文件写入操作

      '''
      file:打开的文件对象。
      string:要写入的字符串。
      '''
      file.write(string)
      
      • 1
      • 2
      • 3
      • 4
      • 5

      通过 write方法可以写入单行数据,如果想要写入多行数据,可以在 with 代码块中,写上多个 write方法即可。注意 write方法默认在行尾不添加换行符,如果希望加上换行符,需手动添加。

      file = "test.txt"
      # 打开文件
      with open(file, mode="w", encoding="utf-8") as f:
          # 写入文件内容
          f.write("我是即将被写入的内容\n")
          f.write("我是即将被写入的内容")
      
      • 1
      • 2
      • 3
      • 4
      • 5
      • 6
    • 使用writelines() 方法写入多行数据

      # 创建一个列表
      txtlist = ['line 1\n', 'line 2\n', 'line 3\n']
      
      # 写入文件
      with open('hello.txt') as hello :
          hello.writelines(txtlist)
      
      • 1
      • 2
      • 3
      • 4
      • 5
      • 6
  • 相关阅读:
    单节点高并发Linux服务器影响接入能力的因素有哪些
    linux安装jenkins
    LQ0015 质因数个数【数论】
    提升设计性能的HDL编码方法
    深入理解RunLoop
    SAP-MM-销售订单库存转移到普通库存
    【计算机网络】 TCP协议头相关知识点
    MySQL 字符集与乱码与collation设置的问题?
    Windows11重置提示找不到恢复环境怎么解决?
    ios 真机调试遇到的图片问题汇总
  • 原文地址:https://blog.csdn.net/zyw2002/article/details/128166228