python標準ライブラリOSモジュールの詳細な説明

Python標準ライブラリOSモジュールの概要##

osは「オペレーティングシステム」の略で、名前が示すように、osモジュールはさまざまなPythonプログラムがオペレーティングシステムと対話するためのインターフェイスを提供します。 osモジュールを使用することで、一方ではオペレーティングシステムと簡単に対話でき、他方ではページはコードの移植性を大幅に向上させることができます。モジュールの関連する機能にエラーがある場合、OSError例外またはそのサブクラス例外がスローされます。

注意
ファイルの読み取りと書き込みを行う場合は、組み込み関数open()を使用することをお勧めします。
パス関連の操作の場合は、osのサブモジュールos.pathを使用することをお勧めします。
複数のファイルを1行ずつ読み取りたい場合は、fileinputモジュールを使用することをお勧めします。
一時ファイルまたはパスを作成するには、tempfileモジュールを使用することをお勧めします。
より高度なファイルおよびパス操作を実行するには、shutilモジュールを使用する必要があります。

もちろん、osモジュールを使用してオペレーティングシステムに依存しないコードを記述しても、osが特定のシステムの拡張関数を呼び出せないという意味ではありませんが、一度呼び出すと、コードの移植性が大幅に損なわれることに注意してください。

また、osモジュールをインポートするときは注意してください。トラブルを防ぐためにosモジュールを解凍してインポートしないでください。つまり、os import *からosモジュールをインポートしないでください。そうしないと、os.open()が組み込み関数を上書きします。 open()、予期しないエラーが発生します。

2. 共通機能##

パスをパラメーターとして受け入れるosモジュールのほとんどの関数は、「ファイル記述子」をパラメーターとして受け入れることもできることに注意してください。
ファイル記述子:Pythonドキュメントではfdと省略されるファイル記述子は、開いているファイルオブジェクトにバインドされた整数であり、システム内のファイルの番号として理解できます。

2.1 os.name

この属性は、Pythonが現在実行されている環境を大まかに示し、実際にはインポートされたオペレーティングシステム関連モジュールの名前です。この名前は、モジュール内のどの機能が使用可能で、どの機能がそれに応じて実装されていないかも決定します。

現在有効な名前は、posix、nt、javaの3つです。

その中には、UNIXのPortable Operating System Interface(Portable Operating System Interface)の略語があります。 LinuxとMacOSの両方がこの値を返します。ntのフルネームは「MicrosoftWindowsNT」である必要があります。これは、Windowsオペレーティングシステムとほぼ同等であるため、この値はWindows環境で返されます。javaはJava仮想マシン環境での戻り値です。

したがって、私のコンピューター(win10)で次のコードを実行すると、戻り値はntになります。

import os
 os.name
' nt'

WSL(WindowsサブシステムLinux、WindowsではLinuxサブシステム)での結果は次のとおりです。

import os
 os.name
' posix'

sysモジュールのsys.platform属性を確認して、オペレーティングプラットフォームに関する詳細情報を取得するため、ここでは繰り返しません。

2.2 os.environ

os.environ属性は、主にさまざまな環境変数など、環境関連の情報を返すことができます。戻り値はマッピング(辞書タイプと同様)であり、特定の値はosモジュールが最初にインポートされたときのスナップショットです。各キーと値のペアについて、キーは環境変数の名前であり、値は環境変数に対応する値です。 osモジュールを初めてインポートした後、os.environの値を直接変更しない限り、この属性の値は変更されなくなります。

たとえば、キーが「HOMEPATH」(Windowsの場合は「HOME」)の場合、対応する値はユーザーのホームディレクトリのパスです。 Windowsでは、その値は次のとおりです。

 os.environ["HOMEPATH"]'d:\justdopython'

Linuxでは、その値は次のとおりです。

 os.environ["HOME"]'/home/justdopython'

2.3 os.walk()

この関数は、topパラメーターとしてパスを渡す必要があります。この関数の関数は、topをルートノードとしてディレクトリツリー内を歩き、ツリー内のディレクトリごとに(dirpath、dirnames、filenames)で構成される3つのアイテムを生成することです。タプル。

その中で、dirpathはこのディレクトリのパスを示す文字列であり、dirnamesはdirpathの下のサブディレクトリ名のリスト(「。」と「..」を除く)であり、filenamesはdirpathの下のすべての非ディレクトリファイル名のリストです。 。これらの名前にはパス自体が含まれていないことに注意してください。ファイルのフルパスまたは最上位ディレクトリから始まるdirpathの下のパスを取得するには、os.path.join(dirpath、name)を使用する必要があります。

最終的な戻り結果はイテレーターであることに注意してください。forステートメントを使用して、イテレーターの各項目を1つずつ取得できます。

for item in os.walk("."):...print(item)...('.',['do'],['go_go_go.txt'])('.\do',['IAmDirectory','python'],[])('.\do\IAmDirectory',[],[])('.\do\python',[],['hello_justdopython.txt'])

2.4 os.listdir()

「Listdir」は「ディレクトリのリスト」を意味し、(現在の)ディレクトリ内のすべてのパス(およびファイル)をリストします。この関数には、リストするサブディレクトリのパスを指定するパラメータがあります。デフォルトは「。」で、これは「現在のパス」です。

関数の戻り値はリストです。各要素は文字列、各パス名、およびファイル名です。

通常、特定のフォルダー内のファイルをトラバースする必要があるシナリオで非常に役立ちます。

たとえば、次の関数を定義します。

def get_filelists(file_dir='.'):
 list_directory = os.listdir(file_dir)
 filelists =[]for directory in list_directory:
 # os.パスモジュールは後でそれについて話します
 if(os.path.isfile(directory)):
  filelists.append(directory)return filelists

この関数の戻り値は、フォルダーではなく、現在のディレクトリー内のすべてのファイルの名前リストです。

2.5 os.mkdir()

「Mkdir」、つまり「make directory」は、「新しいパスを作成する」ために使用されます。新しいパスの場所と名前を指定するには、classpathパラメーターを渡す必要があります。指定したパスが既に存在する場合、FileExistsError例外がスローされます。

この関数は、既存のパスの下に新しい第1レベルのパスのみを作成できます。作成しない場合(つまり、新しいマルチレベルのパス)、FileNotFoundError例外がスローされます。

これに対応して、新しいマルチレベルパスを作成する必要があるシナリオでは、os.makedirs()を使用してタスクを完了することができます。関数os.makedirs()は再帰的な作成を実行します。必要に応じて、最後の「リーフパス」が作成されるまで、指定されたパスを介して新しい中間パスを作成します。

例は次のとおりです。

 os.mkdir("test_os_mkdir")
 os.mkdir("test_os_mkdir")Traceback(most recent call last):
 File "<stdin ", line 1,in<module 
FileExistsError:[WinError 183]ファイルが既に存在する場合、作成できません。:'test_os_mkdir'
    
 os.mkdir("test_os_mkdir/test_os_makedirs/just/do/python/hello")Traceback(most recent call last):
 File "<stdin ", line 1,in<module 
FileNotFoundError:[WinError 3]システムがルートを見つけることができません。:'test_os_mkdir/test_os_makedirs/just/do/python/hello'
    
 os.makedirs("test_os_mkdir/test_os_makedirs/just/do/python/hello")

2.6 os.remove()

ファイルの削除に使用されます。指定されたパスがファイルではなくディレクトリの場合、IsADirectoryError例外がスローされます。ディレクトリを削除するには、os.rmdir()関数を使用します。

同様に、os.makedirs()に対応して、パスの削除操作os.rmdir()にも再帰的な削除関数os.removedirs()があります。この関数は、指定されたパスレベルを、ほぼ最下位レベルのディレクトリからレベルごとに削除しようとします。 os.makedirs();の逆のプロセスで、空でないディレクトリが見つかるとすぐに停止します。

2.7 os.rename()

この関数の機能は、ファイルまたはパスの名前を変更することです。一般的な呼び出し形式はos.rename(src、dst)です。つまり、srcが指すファイルまたはパスの名前はdstで指定された名前に変更されます。

指定されたターゲットパスが別のディレクトリにある場合、この関数はファイルまたはパスの「カットアンドペースト」機能も実装できることに注意してください。ただし、名前をその場で直接変更するか「カットアンドペースト」するかに関係なく、中間パスが存在する必要があります。存在しない場合、FileNotFoundErrorがスローされます。ターゲットパスがすでに存在する場合、FileExistsErrorはWindowsでスローされます。Linuxでは、ターゲットパスが空でユーザー権限が許可されている場合、元のパスはサイレントに上書きされます。それ以外の場合、OSErrorがスローされます。

前の2つの関数と同様に、この関数にも対応する再帰バージョンos.renames()があり、中間パスが欠落している可能性があります。

どちらの場合も、関数が正常に実行されると、os.removedir()関数が呼び出され、ソースパスの最下位ディレクトリが再帰的に削除されることに注意してください。

2.8 os.getcwd()

「getcwd」は、名前が示すように、実際には「get the current working directory」の略語です。つまり、この関数の機能は「get the currentworkingdirectory」です。プログラムの実行プロセスでは、プログラムが実際のストレージスペースのどこに物理的に配置されていても、「現在の作業パス」は、プログラムが配置されているパスと見なすことができます。これに関連して、「相対パス」、「同じディレクトリへのモジュールのインポート」などがあります。すべての操作は「現在の作業パス」の対象となります。

インタラクティブ環境では、返されるのはインタラクティブ端末のオープンな場所です。Pythonファイルでは、返されるのはファイルの場所です。

Windowsでは、次の出力があります。

 os.getcwd()'d:\justdopython\just\do\python'

Linuxでの出力は次のとおりです。

 os.getcwd()'/home/justdopython/just/do/python'

2.9 os.chdir()

「Chdir」は実際には「ディレクトリの変更」の略であるため、os.chdir()の目的は、実際には現在の作業パスを指定されたパスに切り替えることです。 「指定されたパス」は、パラメータとして関数os.chdir()に渡す必要があります。パラメータは、テキストまたはバイト文字列、ファイル記述子、または一般化されたクラスパス(パスのようなもの)にすることができます。 )オブジェクト。指定されたパスが存在しない場合、FileNotFoundErrorがスローされます。

Windowsでは、この関数を呼び出すと次のような効果があります。

 os.chdir("d:/justdopython/just/do")
 os.getcwd()'d:\justdopython\just\do'

Linuxでの効果は次のとおりです。

 os.chdir("/home/justdopython/just/do") #パラメータを次のように指定することもできます".."親ディレクトリに切り替えるには
 os.getcwd()'/home/justdopython/just/do'

この機能を使用すると、ディレクトリ間でファイルを読み書きしたり、モジュールを呼び出したりするのに非常に便利です。多くの場合、ディレクトリ間で同じファイルを繰り返しコピーして貼り付ける必要はありません。スクリプトは軍隊の真ん中に置くことができます。ディレクトリの下にある他のディレクトリファイルの操作の完了は、いわゆる「戦略化中、決定は数千マイル離れた場所よりも優れています」です。

たとえば、「現在の作業ディレクトリ」を親ディレクトリに切り替えることで、親ディレクトリのファイルコンテンツに直接アクセスできます。

 os.chdir("..")
 os.getcwd()'D:\justdopython\just'withopen("hello_justdopython.txt", encoding="utf-8")as f:...   f.read()...'justdopythonへようこそ.com、一緒にPythonテクノロジーを学ぶ~'
 os.listdir()['hello_justdopython.txt']

3. os.pathモジュール##

実際、このモジュールは、システムタイプに応じてosモジュールによって別のモジュールからインポートされ、osモジュールによって直接実装されません。たとえば、os.nameの値がntの場合、パスとしてntpathをインポートします。osモジュールで実行されます。os.nameの値がposixの場合、次に、posixpathをインポートします。

このモジュールを使用する際に注意すべき非常に重要な機能があります。os.pathの関数は基本的に純粋な文字列操作です。つまり、モジュール関数に渡されるパラメーターは有効なパスである必要はなく、モジュールはパスにアクセスしようとせず、「パス」の一般的な形式に従って文字列を処理するだけです。

さらに、os.pathモジュールの機能は、文字列操作を使用して手動で実装できます。このモジュールの機能は、特定のシステムを考慮せずに、特にファイルシステムにあまり注意を払わずに、同じ機能を実装できるようにすることです。セパレータの問題。

3.1 os.path.join()

これは、複数の着信パスを1つのパスに結合できる非常に便利な機能です。実際、着信文字列はシステムセパレータに接続され、新しい文字列に結合されるため、一般的な使用法では、最初のパラメータを親ディレクトリとして使用し、後続のすべてのパラメータは次のレベルのディレクトリになります。 、したがって、新しい論理パスに結合します。

ただし、着信パスに「絶対パス」形式の文字列があり、この文字列が関数の最初のパラメーターではない場合、このパラメーターの前にある他のすべてのパラメーターは破棄され、残りのパラメーターが結合されます。より正確には、最後の「絶対パス」と次のパラメーターのみが返される結果に反映されます。

 os.path.join("just","do","python","dot","com")'just\do\python\dot\com'
    
 os.path.join("just","do","d:/","python","dot","com")'d:/python\dot\com'
    
 os.path.join("just","do","d:/","python","dot","g:/","com")'g:/com'

3.2 os.path.abspath()

着信パスを正規化し、対応する文字列を絶対パス形式で返します。

つまり、着信パスが「絶対パス」の形式に準拠している場合、この関数はパスセパレータを現在のシステムに適した文字に置き換えるだけで、他の操作は行わず、結果を返します。いわゆる「絶対パス形式」とは、実際には、文字とコロンの後に区切り文字と一連の文字列が続く形式を指します。

 os.path.abspath("a:/just/do/python")'a:\just\do\python'
 # 私のシステムにはドライブがありません

指定されたパスが上記の形式に準拠していない場合、関数は現在の作業パスを自動的に取得し、os.path.join()関数を使用して、渡されたパラメーターと組み合わせて新しいパス文字列にします。例は次のとおりです。

 os.path.abspath("ityouknow")'D:\justdopython\ityouknow'

3.3 os.path.basename()

この関数は、着信パスの「ベース名」、つまり着信パスの最下位ディレクトリを返します。

 os.path.basename("/ityouknow/justdopython/IAmBasename")'IAmBasename'
 # 私のシステムにもそのようなパスはありません。目に見えるOS.path.basename()ページは純粋に文字列処理です

この関数について注意すべきことの1つは、返される「ベース名」は実際には渡されたパスの最後の区切り文字の後のサブストリングであるということです。つまり、最下位のディレクトリの後に区切り記号がある場合、結果は次のようになります。空の文字列です:

 os.path.basename("/ityouknow/justdopython/IAmBasename/")''

3.4 os.path.dirname()

前の関数とは異なり、最後の区切り文字の前に文字列全体を返します。

 os.path.dirname("/ityouknow/justdopython/IAmBasename")'/ityouknow/justdopython'
    
 os.path.dirname("/ityouknow/justdopython/IAmBasename/")'/ityouknow/justdopython/IAmBasename'

3.5 os.path.split()

ハハ実は最初の2つの機能は兄弟で、この機能はボスです。

関数os.path.split()の関数は、着信パスを最後の区切り文字を境界として2つの文字列に分割し、それらをタプルにパックして返すことです。最初の2つの関数os.path.dirname()とos.path.basename()の戻り値は、関数os.path.split()の戻り値の最初と2番目の要素です。 2つの具体的な実現でさえ非常に現実的です。

def basename(p):"""Returns the final component of a pathname"""returnsplit(p)[1]
def dirname(p):"""Returns the directory component of a pathname"""returnsplit(p)[0]

これらを組み合わせて、os.path.join()関数を介して元のパスを取得できます。

3.6 os.path.exists()

この関数は、パスが指す場所が存在するかどうかを判別するために使用されます。存在する場合はTrueを返し、存在しない場合はFalseを返します。

 os.path.exists(".")
True
 os.path.exists("./just")
True
 os.path.exists("./Inexistence") #存在しないパス
False

一般的な使用法は、一部のデータを永続的に保存する必要がある場合です。ファイルが繰り返し作成されないようにするには、この関数を使用して、書き込む前に対応するファイルが存在するかどうかを確認する必要があります。存在しない場合は、新しいファイルを作成します。存在する場合は、ファイルの内容をクリックします。新しいコンテンツを追加した後。

3.7 os.path.isabs()

この関数は、着信パスが絶対パスであるかどうかを判断し、絶対パスである場合はTrueを返し、そうでない場合はFalseを返します。もちろん、フォーマットのみがテストされ、その有効性について検証は実行されません。

 os.path.isabs("a:/justdopython")
True

3.8 os.path.isfile()およびos.path.isdir()###

これらの2つの関数はそれぞれ、着信パスがファイルであるかパスであるかを判断します。パスの有効性がここでチェックされることに注意してください。無効なパスである場合は、引き続きFalseを返します。

 # 無効なパス
 os.path.isfile("a:/justdopython")
False
    
 # 効果的なパス
 os.path.isfile("./just/plain_txt")
True
    
 # 無効なパス
 os.path.isdir("a:/justdopython/")
False
 # 効果的なパス
 os.path.isdir("./just/")
True

4. 総括する###

この記事では、オペレーティングシステムと対話するosモジュールで一般的に使用されるいくつかの属性と機能を詳細に紹介します。これは、基本的に初期の学習と使用をカバーできます。これらの関数を使用すると、さらに実用的なスクリプトを作成できます。

記事で紹介した機能に加えて、osモジュールにはもっと複雑な機能がたくさんありますが、それらのほとんどは一時的に利用できず、今後さらに説明します。

この記事では、主にpython標準ライブラリOSモジュールの詳細な使用法について説明します。python標準ライブラリOSモジュールの詳細については、以下の関連リンクを参照してください。

Recommended Posts

python標準ライブラリOSモジュールの詳細な説明
Pythondecimalモジュールの使用法の詳細な説明
pythonバックトラッキングテンプレートの詳細な説明
PythonIOポート多重化の詳細な説明
Python初心者は、標準のライブラリモジュールの命名を学びます
python標準ライブラリのglobの分析
pythonコマンドの-uパラメーターの詳細な説明
Python推測アルゴリズムの問題の詳細な説明
Python super()メソッドの原理の詳細な説明
Pythonでのpipの使用に関する詳細な説明|サードパーティライブラリのインストールの概要
pythonがコンカレントメソッドをサポートする方法の詳細な説明
Python-モジュールの詳細な説明を要求します
Pythonに基づくデータタイプの詳細な説明
pythonのPrettytableモジュール
Python関数パラメータ分類の原理の詳細な説明
Pythonタイマースレッドプールの原理の詳細な説明
Pythonインターフェース開発の実装手順の詳細な説明
Pythonプロセス制御の一般的なツールの詳細な説明
PythonWebページパーサーの使用例の詳細な説明
Pythonオブジェクトの属性アクセスプロセスの詳細な説明
pythonに基づく残りの問題の詳細な説明(%)
python描画モジュールのmatplotlib
Pythonプラグインメカニズムの詳細な実装
gpg2を使用したubuntuの詳細な説明
Pythonエラー処理は詳細な説明を主張します
Pythonでの辞書の詳細な使用法
pythonでのosパッケージの使用
200のPython標準ライブラリの要約!
Pythonモジュールの知識の完全な分析
Python学習OSモジュールと使用法
Pythonタートルライブラリ実装の基本的な分析
Python3モジュール
Pythonガベージコレクションメカニズムの詳細な分析
属性からプロパティまでのPython詳細な説明
Pythonタイムモジュールの一般的な操作の概要
pythonにdjangoモジュールをインストールする方法
Python言語の本質:Itertoolsライブラリ
Python仮想環境venvの使用法の詳細な説明
pythonインポートライブラリの特定の方法
Ubuntu20.04インストールPython3仮想環境チュートリアル詳細な説明
Python操作の一般的なメソッドの分析Jiraライブラリ
CentOS6.5でのHadoop環境の構築に関する詳細な説明
Pythonを使用してKSを計算する詳細な例
Python3.9の7つの機能
Pythonレッスン37-モジュール
Ubuntuでの静的DNS構成方法の詳細な説明
Centos7システム仮想マシンブリッジングモードの詳細な説明
Ubuntuシステムでの静的DNS構成の詳細な説明
同等の保険評価:Centosタイムアウト終了の詳細な説明
vmwareでのCentOS7ネットワーク設定チュートリアルの詳細な説明