路徑操作

路徑操作模塊

3.4版本之前

  • os.path模塊
    from os import path
    
    p = path.join('/etc', 'sysconfig', 'network')
    print(type(p), p)
    print(path.exists(p))
    print(path.split(p))
    print(path.abspath('.'))
    
    p = path.join('d:/', p, 'test.txt')
    path.dirname(p)
    path.basename(p)
    path.splitdrive(p)
    

    59f062dedc3a236e99000002


3.4版本之后

建議使用pathlib模塊,提供Path對象來操作。包括目錄和文件


pathlib模塊

  • from pathlib import Path

目錄操作

初始化

p = Path()
p = Path('a', 'b', 'c/d')

59f073e3dc3a236e99000004


路徑拼接和分解

  • 操作符
    Path對象 / Path對象
    Path對象 / 字符串 或者 字符串 / Path對象
    
  • 分解
    • parts屬性,可以返回路徑中的每一個部分
    • joinpath(*other)
    • 連接多個字符串到Path對象中joinpath

    59f074c3dc3a236e99000005


獲取路徑

  • str ? 獲取路徑字符串
  • bytes ? 獲取路徑字符串的bytes

    59f0754cdc3a236e99000006


父目錄

  • parent ? 目錄的邏輯父目錄
  • parents ? 父目錄序列,索引父,其他是爺爺輩

    59f07618dc3a236e99000007


name、stem、suffix、suffixes、with_suffix(suffix)、with_name(name)

  • name ? 目錄的最后一個部分
  • suffix ? 目錄中最后一個部分的擴展名(后綴)
  • stem ? 目錄最后一個部分,沒有后綴
  • suffixes ? 返回多個擴展名列表
  • with_suffix(suffix) ? 補充擴展名到路徑尾部,返回新的路徑,擴展名存在則無效
    • p.with_suffix(‘.txt’),txt前必須有點,否則會報錯
  • with_name(name) ? 替換目錄最后一個部分,并返回一個新的路徑

    59f079a7dc3a236e99000008


其他操作

  • cwd()
    • 返回當前工作目錄
  • home()
    • 返回當前家目錄
  • is_dir()
    • 是否是目錄
  • is_file()
    • 是否是文件
  • is_symlink()
    • 是否是軟鏈接
  • is_socket()
    • 是否是socket文件
  • is_block_device()
    • 是否是塊設備
  • is_char_device()
    • 是否是字符設備
  • is_absolute()
    • 是否是絕對路徑
  • resolve()
    • 返回一個新的路徑,這個新路徑就是當前Path對象的絕對路徑,如果是軟鏈接則直接被解析
  • absolute()
    • 也獲取絕對路徑,但是推薦使用resolve()
  • exists()
    • 目錄或文件是否存在
  • rmdir()
    • 刪除空目錄,幾乎不用
  • touch(mode=0o666, exist_ok=True)
    • 創建一個文件
  • as_uri()
    • 將路徑返回成URI,例如'file:///etc/passwd'
  • mkdir(mode=0o777, parents=False, exist_ok=False)
    • parents,是否創建父目錄
      • True,等同于mkdir -p
      • False,父目錄不存在,則拋出FileNotFoundError
    • exist_ok
      • 在3.5版本加入
      • False,路徑存在,拋出FileExistsError
      • True,FileExistsError被忽略
    • 迭代當前目錄iterdir()

    59f07fe1dc3a236e99000009

    • p /= 'a/b/c/d'等價于p = p / 'a/b/c/d'

    59f07ff8dc3a236e9900000a

    59f080eddc3a236e9900000b

    • 遍歷,并判斷文件類型,如果是目錄,判斷其是否為空
      for x in p.parents[len(p.parents)-1].iterdir():
          print(x,end='\t')
          if x.is_dir():
              flag = False
              for _ in x.iterdir():
                  flag = True
                  break
              print('dir','Not Empty' if flag else 'Empty',sep='\t')
          elif x.is_file():
              print('file')
          else:
              print('other file')
      

      59f084e5dc3a236e9900000c


通配符

  • glob(pattern) ? 通配給定的模式
  • rglob(pattern) ? 通配給定的模式,遞歸目錄
    p = Path('d:/test')p.glob('p*')    # 生成器list(p.glob('p*'))  # 返回當前目錄對象下的p開頭的文件list(p.glob('*/p*'))  # 返回當前目錄的下一級目錄對象下的p開頭的文件list(p.glob('**/p*'))# 遞歸所有目錄,等同rgloblist(p.rglob('*p'))

    59f13db8c67d161fb6000000

    • 返回當前目錄的下一級目錄對象下的p開頭的文件
      59f13fcbc67d161fb6000001

匹配

  • match(pattern)
  • 模式匹配,成功返回True
    59f141aac67d161fb6000002

文件操作

  • Path.open(self, mode=’r’, buffering=-1, encoding=None, errors=None, newline=None)
    • 使用方法類似內建函數open,返回一個文件對象
    • read_bytes()
      • rb讀取路徑對應文件,返回二進制流
    • read_text(encoding=None, errors=None)
      • rb讀取路徑對應文件,返回二進制流
    • Path.write_bytes(data)
      • wb方式寫入數據到路徑對應文件
    • write_text(data, encoding=None, errors=None)
      • wb方式寫入數據到路徑對應文件
    • 上面的可以看源碼理解,有時候比看幫助文件簡單3.5新增加的函數

    59f1452ac67d161fb6000003

    from pathlib import Path
    
    p = Path('d:/test.py')
    p.write_text('hello everyone')
    print(p.read_text())
    with p.open() as f:
        print(f.read(5))
    

    59f1462ec67d161fb6000004

本文來自投稿,不代表Linux運維部落立場,如若轉載,請注明出處:http://www.www58058.com/88093

(0)
nolannolan
上一篇 2017-10-27 09:45
下一篇 2017-10-29 11:20

相關推薦

  • 第一周作業-03

    ifconfig命令:查看及臨時修改網卡配置信息    查看的用法:ifconfig [-v] [-a] [-s] [INTERFACE]        OPTIONS            -v:詳細顯示接口報錯信息   &nb…

    Linux干貨 2016-09-19
  • 進程理論和相關工具的使用

    內核的功用 進程管理、文件系統、網絡功能、內存管理、驅動程序、安全功能等     Process: 運行中的程序的一個副本,是被載入內存的一個指令集合 進程ID(Process ID,PID)號碼被用來標記各個進程     UID、GID、和SELinux語境決定對文件…

    Linux干貨 2017-08-28
  • 文件管理命令及變量基礎

    文件管理工具:cp,    mv,     rm       cp命令:copy 源文件;目標文件 單源復制: cp [OPTION]….[-T]  SOURCE  DEST 多源復制:cp [OPTION] ….SOURCE…DIR…

    Linux干貨 2016-12-21
  • N22-第五周博客作業

    1、顯示當前系統上root、fedora或user1用戶的默認shell; [root@bogon ~]# grep -E  "^(root|fedora|user1)" /etc/passwd  | cut -d: -f1,7r…

    Linux干貨 2016-09-26
  • 學而時習之

    1、 Linux上的文件管理類命令都有哪些,其常用的使用方法及其相關示例演示。 文件管理類命令 ls, 查看:cat,more,less,tail,head,tac 復制:cp 移動:mv 刪除:rm 創建:touch 元數據屬性:stat 查看內容類型:file 文本編輯器:nano,vi Linux的文件類型       &…

    Linux干貨 2016-09-24
  • Kickstart實現CentOS 6.5的網絡自動安裝

    1.KickStart KickStart是一種無人職守安裝方式。KickStart的工作原理是通過記錄典型的安裝過程中所需人工干預填寫的各種參數,并生成一個名為ks.cfg的文件;在其后的安裝過程中(不只局限于生成KickStart安裝文件的機器)當出現要求填寫參數的情況時,安裝程序會首先去查找KickStart生成的文件,當找到合適的參數時,就采用找到的…

    Linux干貨 2016-10-24
欧美性久久久久