Python
 Computer >> コンピューター >  >> プログラミング >> Python

Pythonでのファイルとディレクトリの比較


Pythonの標準ライブラリには、ファイルとディレクトリを比較するための関数を定義するfilecmpモジュールがあります。この比較では、ファイル内のデータに加えて、ファイルのプロパティも考慮されます。

この記事のサンプルコードでは、次のファイルとディレクトリの構造を使用しています。

2つのディレクトリdir1とdir2は、最初に現在の作業ディレクトリの下に作成されます。次のファイルが含まれています。

--dir1/newfile.txt--
This is a file in dir1
--dir1/file1.txt--
Hello Python
--dir1/file2.txt--
Python Standard Library
--dir2/file1.txt--
Hello Python
--dir2/file2.txt--
Python Library

ここで、filecmpモジュールのさまざまな比較関数について説明します。

filecmp.cmp(f1、f2、shallow =True)

この関数は2つのファイルを比較し、それらが同一である場合はTrueを返し、そうでない場合はFalseを返します。浅いパラメータはデフォルトでTrueです。したがって、ファイルのメタデータは、内容に加えて比較のために考慮されます。浅さがFalseに設定されている場合、内容のみが比較されます。

ファイル構造に基づいて、次のコードは次のような出力を生成します-

Differing files : ['file2.txt']
>>> filecmp.cmp('dir1/file1.txt', 'dir2/file1.txt')
True
>>> filecmp.cmp('dir1/file1.txt', 'dir2/file1.txt', shallow = False)
True
>>> filecmp.cmp('dir1/file2.txt', 'dir2/file2.txt')
False

filecmp.cmpfiles(dir1、dir2、shallow)

この関数は、2つのディレクトリ内のファイルを比較し、3項目のタプルを返します。タプルの最初の項目は一致したファイルのリスト、2番目は一致しないファイルのリスト、3番目は一般的なファイルのリストです。

>>> match, mismatch,errors = filecmp.cmpfiles('dir1','dir2',['file1.txt', 'file2.txt'])
>>> match
['file1.txt']
>>> mismatch
['file2.txt']
>>> errors
[]

filecmpモジュールは、dircmpクラスも定義します。そのオブジェクトはディレクトリ比較オブジェクトです。左ディレクトリと右ディレクトリとして識別される2つのディレクトリ内のファイルを比較します。オブジェクトは、以下に説明するようにさまざまなメソッドを実行できます-

filecmp.dircmp(a、b)

これはコンストラクターです。 aとbは比較するディレクトリです。デフォルトでは、ディレクトリ内のシステムファイルは非表示になり、比較すると無視されます。

>>> result = filecmp.dircmp('dir1', 'dir2')

dircmpクラスの他のメソッドは次のとおりです-

report()

このメソッドは、ディレクトリ間の比較結果を出力します。

>>> result = filecmp.dircmp('dir1', 'dir2')
>>> result.report()
diff dir1 dir2
Only in dir1 : ['newfile.txt']
Identical files : ['file1.txt']
Differing files : ['file2.txt']

左、右

これらのプロパティは、dircmpコンストラクターの1番目と2番目のディレクトリの名前を出力します

>>> result.left
'dir1'
>>> result.right
'dir2'

left_list、right_list

これらの属性は、両方のディレクトリ内のファイルのリストを返します

>>> result.left_list
['file1.txt', 'file2.txt', 'newfile.txt']
>>> result.right_list
['file1.txt', 'file2.txt']
>

common、common_files、common_dirs

これらの属性は、共通ファイルとディレクトリ、共通ファイルのみ、および共通ディレクトリのみを返します。

>>> result.common
['file1.txt', 'file2.txt']
>>> result.common_files
['file1.txt', 'file2.txt']
>>> result.common_dirs
[]

same_file、diff_files

属性は、dircmpクラスで定義された比較演算子を使用して同一ファイルと異なるファイルのリストを返します。

>>> result.same_files
['file1.txt']
>>> result.diff_files
['file2.txt']

この記事では、dircmpクラス、そのメソッド、およびfilecmpモジュールで定義されているファイル比較関数について説明します。


  1. Pythonでファイルをコピーするにはどうすればよいですか?

    shutilモジュールは、ファイルとフォルダ全体をコピーするための機能を提供します。 shutil.copy(source、destination)を呼び出すと、パスソースのファイルがパス宛先のフォルダーにコピーされます。 (ソースと宛先はどちらも文字列です。)宛先がファイル名の場合、コピーされたファイルの新しい名前として使用されます。この関数は、コピーされたファイルのパスの文字列を返します。 例の場合 、 >>>> import shutil >>> # Copy the file in same folder with different nam

  2. Pythonでディレクトリ内の複数のファイルを削除するにはどうすればよいですか?

    osモジュールの関数を含む単一のファイルまたは単一の空のフォルダーを削除できます。 例 たとえば、ファイルmy_file.txtを削除する場合は、 >>> import os >>> os.remove('my_file.txt') os.removeの引数は、絶対パスまたは相対パスである必要があります。 複数のファイルを削除するには、ファイルのリストをループして上記の関数を使用します。削除するすべてのファイルを含むフォルダを削除する場合は、次のようにフォルダを削除できます。 >>> import shutil >