路徑操作

路徑操作模塊

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
下一篇 2017-10-29

相關推薦

  • KeepAlived的配置及使用!

    此篇博客主要是和大家共同了解一下keepalived的功能及基礎配置,以便于牢固掌握,此篇博客共分為三個部分;                ⊙ 簡述keepalived的主要功能及安裝環境;           &nb…

    2017-05-13
  • N26-博客作業-week15

    1、總結sed和awk的詳細用法 sed: 語法結構 sed [OPTION]…’script’ [input-file]…[action] -r:支持擴展正則表達式 -n:不輸出模式空間中的內容至屏幕 -e script1 -e script2 -e script3:指定多腳本運行 -f /path/to/script_file:從指定的文件中讀取…

    Linux干貨 2017-07-14
  • Ansible+Corosync+Pacemaker+nfs實現http高可用

    目錄: (一)實驗環境 (二)準備工作 (三)為node1和node2配置基礎配置 (四)使用ansible部署nfs (五)使用ansible部署corosync和pacemaker (六)使用ansible安裝crmsh工具 (七)使用crmsh配置http高可用 (八)驗證 (九)需要注意的地方 (一)實驗環境 1.1、環境拓撲 1.2、所需系統 4臺…

    Linux干貨 2016-04-29
  • mysql編譯安裝

    MYSQL編譯安裝:參考(http://v.youku.com/v_show/id_XMjc4MDUwNjYyOA==.html?from=s1.8-1-1.2&spm=a2h0k.8191407.0.0)(http://oldboy.blog.51cto.com/2561410/1917295)     編譯安裝mysql,最好…

    Linux干貨 2017-06-09
  • N26-第四周

    1、復制/etc/skel目錄為/home/tuser1,要求/home/tuser1及其內部文件的屬組和其它用戶均沒有任何訪問權限。   2.編輯/etc/group文件,添加組hadoop。          3.手動編輯/etc/passwd文件新增一行,添加用戶hadoop,其基本組ID為h…

    2017-02-22
  • LAMP運行環境搭建及部署php程序軟件

    前言     Linux+Apache+MySQL+PHP是大多數web服務器的運行環境,能熟練配置此運行環境是每個運維的必備基本技能,本文以安裝MySQL管理工具PHPmyadmin以及博客軟件wordpress為例,演示編譯安裝LAMP運行環境的過程。 一、實驗拓撲圖 二、安裝步驟 2.1 編譯安裝Apache h…

    2015-11-26
欧美性久久久久