PythonIOプログラミングのオペレーティングファイルとディレクトリ

Pythonの研究ノート、特別な記録、あなたと共有してください、私はそれが皆に役立つことを願っています。

ファイルとディレクトリを操作する

ファイルやディレクトリを操作する場合は、オペレーティングシステムが提供するさまざまなコマンドをコマンドラインから入力して完了できます。dir、cp、その他のコマンドなど。

Pythonプログラムでこれらのディレクトリとファイルの操作を実行したい場合はどうなりますか?実際、オペレーティングシステムによって提供されるコマンドは、オペレーティングシステムによって提供されるインターフェイス関数を呼び出すだけであり、Pythonの組み込みosモジュールは、オペレーティングシステムによって提供されるインターフェイス関数を直接呼び出すこともできます。

Pythonインタラクティブコマンドラインを開き、osモジュールの基本機能の使用方法を見てみましょう。

import os
print os.name

演算結果:

posix

Process finished with exit code 0

posixの場合は、システムがLinux、Unix、またはMac OS Xであることを意味し、ntの場合は、Windowsシステムであることを意味します。

詳細なシステム情報を取得するには、una​​me()関数を呼び出します。

print os.uname()

演算結果:

('Darwin', 'FBY-is-MBP', '16.8.0', 'Darwin Kernel Version 16.8.0: Mon Mar 11 20:40:32 PDT 2019; root:xnu-2782.20.48~5/RELEASE_X86_64', 'x86_64')

Process finished with exit code 0

uname()関数はWindowsでは提供されていないことに注意してください。つまり、osモジュールの一部の関数はオペレーティングシステムに関連しています。

環境変数

オペレーティングシステムで定義された環境変数はすべて変数os.environに格納されており、直接表示できます。

print os.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', ...}

Process finished with exit code 0

環境変数の値を取得するには、os.environ.get( 'key')を呼び出すことができます。

print os.environ.get('PATH')
print os.environ.get('x', 'default')

演算結果:

/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin:/opt/X11/bin:/usr/local/mysql/bin
default

Process finished with exit code 0

ファイルとディレクトリを操作する

ファイルやディレクトリを操作するための関数の一部はosモジュールに配置され、関数の一部はos.pathモ​​ジュールに配置されます。この点に注意してください。ディレクトリの表示、作成、削除は次のように呼び出すことができます。

# 查看当前目录的绝对路径:
print os.path.abspath('.')
# 在某个目录下创建一个新目录,首先把新目录的完整路径表示出来:
print os.path.join('/Users/michael', 'testdir')
# 然后创建一个目录:
print os.mkdir('/Users/michael/testdir')
# 删掉一个目录:
print os.rmdir('/Users/michael/testdir')

2つのパスを1つに結合する場合は、文字列を直接綴るのではなく、os.path.join()関数を使用して、異なるオペレーティングシステムのパスセパレータを正しく処理できるようにします。Linux / Unix / Macでは、os.path.join()は次のような文字列を返します。

part-1/part-2

そして、Windowsではそのような文字列を返します:

part-1\part-2

同様に、パスを分割する場合は、文字列を直接分割するのではなく、os.path.split()関数を使用して、パスを2つの部分に分割できるようにします。これにより、パスは常に2つの部分に分割されます。最終レベルのディレクトリまたはファイル名:

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

演算結果:

'/Users/michael/testdir', 'file.txt'

os.path.splitext()を使用すると、ファイル拡張子を直接取得できます。これは、多くの場合に非常に便利です。

print os.path.splitext('/path/to/file.txt')

演算結果:

'/path/to/file', '.txt'

パスをマージおよび分割するためのこれらの関数は、ディレクトリとファイルが存在する必要はなく、文字列に対してのみ機能します。

ファイル操作は以下の機能を使用します。現在のディレクトリにtest.txtファイルがあると仮定します。

# 对文件重命名:
print os.rename('test.txt', 'test.py')
# 删掉文件:
print os.remove('test.py')

しかし、ファイルをコピーする機能はosモジュールには存在しません!その理由は、ファイルのコピーはオペレーティングシステムによって提供されるシステムコールではないためです。理論的には、前のセクションでファイルを読み書きすることでファイルのコピーを完了することができますが、多くのコードを記述する必要があります。

幸い、shutilモジュールはcopyfile()関数を提供します。また、osモジュールの補足として見ることができるshutilモジュールには多くの便利な関数があります。

最後に、Pythonの機能を使用してファイルをフィルタリングする方法を見てください。たとえば、現在のディレクトリ内のすべてのディレクトリを一覧表示する場合、必要なコードは1行だけです。

print [x for x in os.listdir('.') if os.path.isdir(x)]

演算結果:

['.lein', '.local', '.m2', '.npm', '.ssh', '.Trash', '.vim', 'Applications', 'Desktop', ...]

すべての.pyファイルを一覧表示するには、1行のコードのみが必要です。

print [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']

おすすめ

転載: blog.csdn.net/qq_36478920/article/details/99584536