1. 程式人生 > >python操作檔案和目錄

python操作檔案和目錄

獲取操作型別

 >>> import os
    >>> os.name # 作業系統型別
    'posix'

要獲取詳細的系統資訊,可以呼叫uname()函式:

>>> os.uname() #在windows上不提供
posix.uname_result(sysname='Darwin', nodename='MichaelMacPro.local', release='14.3.0', version='Darwin Kernel Version 14.3.0: Mon Mar 23 11:59:05 PDT 2015; root:xnu-2782.20.48~5/RELEASE_X86_64', machine='x86_64')

檢視環境變數

>>> os.environ
environ({'VERSIONER_PYTHON_PREFER_32_BIT': 'no', 'TERM_PROGRAM_VERSION': '326', 'LOGNAME': 'michael', 'USER': 'michael', 'PATH': '/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin:/opt/X11/bin:/usr/local/mysql/bin', ...})

獲取環境變數的值

>>> os.environ.get('PATH')
'/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin:/opt/X11/bin:/usr/local/mysql/bin'
>>> os.environ.get('x', 'default')
'default'

相關操作

# 檢視當前目錄的絕對路徑:
>>> os.path.abspath('.')
'/Users/michael'
# 在某個目錄下建立一個新目錄,首先把新目錄的完整路徑表示出來:
>>> os.path.join('/Users/michael', 'testdir')
'/Users/michael/testdir'
# 然後建立一個目錄:
>>> os.mkdir('/Users/michael/testdir')
# 刪掉一個目錄:
>>> os.rmdir('/Users/michael/testdir')
# 對檔案重新命名:
>>> os.rename('test.txt', 'test.py')
# 刪掉檔案:
>>> os.remove('test.py')

把兩個路徑合成一個

os.path.join()

拆分路徑

>>> os.path.split('/Users/michael/testdir/file.txt')
('/Users/michael/testdir', 'file.txt')

得到副檔名

>>> os.path.splitext('/path/to/file.txt')
('/path/to/file', '.txt')

列出當前目錄下的所有目錄

>>> [x for x in os.listdir('.') if os.path.isdir(x)]
['.lein', '.local', '.m2', '.npm', '.ssh', '.Trash', '.vim', 'Applications', 'Desktop', ...]

要列出所有的.py檔案

>>> [x for x in os.listdir('.') if os.path.isfile(x) and os.path.splitext(x)[1]=='.py']
['apis.py', 'config.py', 'models.py', 'pymonitor.py', 'test_db.py', 'urls.py', 'wsgiapp.py']

notes: os.listdir() 方法用於返回指定的資料夾包含的檔案或資料夾的名字的列表

課後習題:

1、利用os模組編寫一個能實現dir -l輸出的程式。 2、編寫一個程式,能在當前目錄以及當前目錄的所有子目錄下查詢檔名包含指定字串的檔案,並打印出相對路徑。

import os


def dir_l(path='.'):
    L = os.listdir(os.path.abspath(path))
    print([x for x in L])


def find_str(a,b):
    for file in os.listdir(a):
        if os.path.isfile(a+'\\'+file):
            if b in file: print(file,'=>',a+'\\'+file)
        else:
            find_str(a+'\\'+file,b)


if __name__ == "__main__":
    dir_l()
    find_str(os.path.abspath('.'), 'xml')