Python学習-ファイルとディレクトリの操作

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

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

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

>>> import os
>>> os.name # 操作系统类型
'posix'

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

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

>>> os.uname()
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')

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

環境変数

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

>>> 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( 'key')を呼び出すことができます。

>>> 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モジュールに配置され、関数の一部はos.pathモ​​ジュールに配置されます。この点に注意してください。ディレクトリの表示、作成、削除は次のように呼び出すことができます。

# 查看当前目录的绝对路径:
>>> os.path.abspath('.')
'/Users/michael'
# 在某个目录下创建一个新目录,首先把新目录的完整路径表示出来:
>>> os.path.join('/Users/michael', 'testdir')
'/Users/michael/testdir'
# 然后创建一个目录:
>>> os.mkdir('/Users/michael/testdir')
# 删掉一个目录:
>>> 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つの部分に分割できるようにします。後者の部分は、常に最終レベルのディレクトリまたはファイル名:

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

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

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

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

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

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

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

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

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

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

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

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

概要

Pythonのosモジュールは、オペレーティングシステムのディレクトリとファイルの操作をカプセル化します。これらの関数の一部はosモジュールにあり、一部はos.pathモ​​ジュールにあることに注意してください。

運動

  1. osモジュールを使用して、dir-l出力を実現できるプログラムを作成します。
  2. 現在のディレクトリと現在のディレクトリのすべてのサブディレクトリで指定された文字列を持つファイルを検索し、相対パスを出力できるプログラムを作成します。

おすすめ

転載: blog.csdn.net/qq_44787943/article/details/112574083