Heim Backend-Entwicklung Python-Tutorial Einfache Verwendung von filecmp in Python

Einfache Verwendung von filecmp in Python

Jul 19, 2017 pm 11:30 PM
python

Das filecmp-Modul wird zum Vergleichen des Inhalts von Dateien und Ordnern verwendet. Es ist ein leichtes Tool und sehr einfach zu verwenden. Die Python-Standardbibliothek stellt außerdem das Modul difflib zum Vergleichen von Dateiinhalten bereit. Was das Difflib-Modul betrifft, hören wir uns das nächste Mal die Aufschlüsselung an.

filecmp definiert zwei Funktionen zum bequemen Vergleichen von Dateien und Ordnern:

filecmp.cmp(f1, f2[, flach]):

Vergleiche zwei Ob der Inhalt der Dateien übereinstimmen. Die Parameter f1, f2 geben den Pfad der zu vergleichenden Datei an. Der optionale Parameter Shallow gibt an, ob die Attribute der Datei selbst beim Vergleich von Dateien berücksichtigt werden müssen (Dateiattribute können über die Funktion os.stat abgerufen werden). Wenn der Dateiinhalt übereinstimmt, gibt die Funktion „True“ zurück, andernfalls gibt sie „False“ zurück.

filecmp.cmpfiles(dir1, dir2, common[, flach]):

Vergleicht, ob die angegebenen Dateien in zwei Ordnern gleich sind. Die Parameter dir1 und dir2 geben die zu vergleichenden Ordner an und der Parameter common gibt die Liste der zu vergleichenden Dateinamen an. Die Funktion gibt ein Tupel zurück, das drei Listenelemente enthält, die übereinstimmende, nicht übereinstimmende bzw. Fehlerdateilisten darstellen. Eine falsche Datei bezieht sich auf eine Datei, die nicht existiert, oder die Datei wurde als nicht lesbar eingestuft, oder es besteht keine Berechtigung zum Lesen der Datei, oder auf die Datei kann aus anderen Gründen nicht zugegriffen werden.

Das filecmp-Modul definiert eine dircmp-Klasse zum Vergleichen von Ordnern über diese Klasse, um einige detaillierte Vergleichsergebnisse zu erhalten (z. B. eine Liste von Dateien, die nur in Ordner A vorhanden sind). Vergleich von Unterordnern.

2. Einfache Verwendung von filecmp

2.1 Einfache Verwendung von cmp

Verwendung: filecmp.cmp(file1, file2), wenn file1 und file2 gleich sind, wird true zurückgegeben, andernfalls wird false zurückgegeben, was als Unterschied beim Vergleich einzelner Dateien bezeichnet wird.

2.1.1 KopierenEine Datei zweimal sichern

1 # cp /etc/vnc.conf ./2 # cp /etc/vnc.conf ./vnc.conf.bak
Nach dem Login kopieren

2.1.2 SchreibenPython Code

 1 # cat lcmp.py 2  3 #!/usr/bin/env python 4  5 import sys 6  7 import filecmp 8  9 import os10 11 try:12 13     file1 = sys.argv[1]14 15     file2 = sys.argv[2]16 17 except:18 19     print ("Please follow the parameters")20 21     sys.exit()22 23 if os.path.isfile(file1) and os.path.isfile(file2) :24 25     if filecmp.cmp(file1,file2):26 27         print ("Match success")28 29     else :30 31         print ("Match failed")32 33 else:34 35     print ("Please check files")36 37     sys.exit()
Nach dem Login kopieren

2.1.2 Ausgabe des Ausführungsskripts

1 # python lcmp.py vnc.conf vnc.conf.bak 
2 Match success
Nach dem Login kopieren

Aus dem Einspruchsergebnis geht hervor, dass , Datei mit OK verglichen wurde, jetzt vnc.conf ändern .bak Inhalt, dann das Skript ausführen

2.1.3Erneut ausführen

1 # sed -i s/vnc/liwang.org/ vnc.conf.bak2 # python lcmp.py vnc.conf vnc.conf.bak 
3 Match failed
Nach dem Login kopieren

Wenn der Dateivergleich nicht erfolgreich ist, wird die Ausgabe Match failed beweisen, dass das Skript ok

ist 2.2 cmpfiles Einfache Verwendung von

Verwendung: filecmp.cmpfiles(dir1,dir2,common[files...]), das zum Vergleichen verwendet wird Die Verzeichnisse dir1 und dir2 Der Unterschied besteht darin, dass diese Methode drei Listen zurückgibt, nämlich Übereinstimmung, Nichtübereinstimmung und Fehler.

2.2.1 Datei kopieren

1 # mkdir -p dir1 dir22 # cp lcmp.py vnc.conf vnc.conf.bak dir1/3 # cp lcmp.py vnc.conf dir2/
Nach dem Login kopieren

2.2.2 SchreibenPythonCode

 1 # cat lcmpfiles.py 2  3 #!/usr/bin/env python 4  5 import os 6  7 import filecmp 8  9 import sys10 11 dir1 = input("Please enter a folder to match:")12 13 dir2 = input("Please enter a folder to match:")14 15 files = []16 17 while True:18 19     local_files = input("Please enter the file to compare:[n/N Exit the input]")20 21     if local_files == 'N' or local_files == 'n':22 23         break24 25     elif local_files == '':26 27         continue28 29     else :30 31         files.append(local_files)32 33 try:34 35     os.path.exists(dir1)36 37     os.path.exists(dir2)38 39 except:40 41     print ("Pleae check the folder.")42 43     sys.exit()44 45 #print (filecmp.cmpfiles(dir1,dir2,files)[0])46 47 print ("It's file match:",filecmp.cmpfiles(dir1,dir2,files)[0])48 49 print ("The file does not match:",filecmp.cmpfiles(dir1,dir2,files)[1])50 51 print ("File does not exists:",filecmp.cmpfiles(dir1,dir2,files)[2])
Nach dem Login kopieren

2.2.3 Verwenden Sie Python3, um das Skript auszuführen( Aufgrund der Verwendung von Eingabe)

 1 # python3 lcmpfiles.py 
 2 Please enter a folder to match:dir1 3 Please enter a folder to match:dir2 4 Please enter the file to compare:[n/N Exit the input]lcmp.py 5 Please enter the file to compare:[n/N Exit the input]vnc.conf 6 Please enter the file to compare:[n/N Exit the input]vnc.conf.bak 7 Please enter the file to compare:[n/N Exit the input]n 8 It's file match: ['lcmp.py', 'vnc.conf'] 9 The file does not match: []10 File does not exists: ['vnc.conf.bak']
Nach dem Login kopieren

可以看出,lcmp.py 和 vnc.conf 在dir1 和dr2都有,且文件内容相同,而vnc.conf.bak在dir1有,dir没有,故输出,文件匹配:lcmp.py和vnc.conf ,文件不存在:vnc.conf.bak,文件不相同:无

2.2 dircmp的简单使用

语法:dircmp(a,b,[,ignore[,hide]]) 其中a,b是文件名,ignore是可以忽略的列表,hide代表隐藏列表,dircmp可以获得目录比较详细的信息,同时还支持递归。

dircmp提供了三个输出方法:

report() 比较当前指定目录中的内容

report_full_closure() 递归比较所有指定文件的内容

2.2.1 模拟环境

1 # ls dir1/ dir2/2 dir1/:3 hosts  ld.so.conf  sysconfig4 5 dir2/:6 hosts  ld.so.conf  sysconfig
Nach dem Login kopieren

其中,sysconfig 是一个目录 hosts ld.so.conf都是文件,hosts内容不一致 sysconfig中的文件也不一样

2.2.2 编写python代码

2.2.2.1 dircmp.report()

 1 # cat simple_filecmp.py 2  3 #!/usr/bin/env python 4  5 import filecmp 6  7 dir1 = "/root/python/d_2_filecmp/cmp/dir2" 8  9 dir2 = "/root/python/d_2_filecmp/cmp/dir1"10 11 dirobj = filecmp.dircmp(dir1,dir2)12 13 print (dirobj.report())
Nach dem Login kopieren

2.2.2.2 执行脚本

1 # python simple_filecmp.py 
2 diff /root/python/d_2_filecmp/cmp/dir2 /root/python/d_2_filecmp/cmp/dir13 Identical files : ['ld.so.conf']4 Differing files : ['hosts']5 Common subdirectories : ['sysconfig']6 None7 [root@localhost cmp]# cat simple_filecmp.py
Nach dem Login kopieren

由上面的结果,我们可以看出,report只能比对脚本的首层目录,而无法对子文件夹下的目录进行匹配

2.2.2.3 report_full_closure()

 1 # cat simple_filecmp_2.py 2  3 #!/usr/bin/env python 4  5 import filecmp 6  7 dir1 = "/root/python/d_2_filecmp/cmp/dir1/" 8  9 dir2 = "/root/python/d_2_filecmp/cmp/dir2/"10 11 dirobj = filecmp.dircmp(dir1,dir2)12 13 print (dirobj.report_full_closure())
Nach dem Login kopieren

2.2.2.4 执行脚本

1 diff /root/python/d_2_filecmp/cmp/dir1/ /root/python/d_2_filecmp/cmp/dir2/2 Identical files : ['ld.so.conf']3 Differing files : ['hosts']4 Common subdirectories : ['sysconfig']5 6 diff/root/python/d_2_filecmp/cmp/dir1/sysconfig /root/python/d_2_filecmp/cmp/dir2/sysconfig7 ......
Nach dem Login kopieren

由此可见差别report()report_full_closure()的差别在于

3.filecmp案例

3.1 需求

需求:1.备份etc 文件夹下所有的内容,并且保持实时备份,如果有新的文件,则copy至备份文件中,如果有新的,则update

3.2 流程图

3.2.1 初步流程图:

 

3.2.2 对比文件差异流程图

3.3 代码编写:

3.3.1 补充知识:

dircmp.left_only

只在左边出现的文件

 1 # cat simple_filecmp_3.py 2  3 #!/usr/bin/env python 4  5 import filecmp 6  7 dir1 = "/root/python/d_2_filecmp/cmp/dir1/" 8  9 dir2 = "/root/python/d_2_filecmp/cmp/dir2/"10 11 dirobj = filecmp.dircmp(dir1,dir2)12 13 print (dirobj.diff_files)
Nach dem Login kopieren

执行结果

1 # ls dir1 dir2/2 dir1:3 hosts  ld.so.conf  sysconfig  teacher4 5 dir2/:6 hosts  ld.so.conf  sysconfig7 [root@localhost cmp]# python simple_filecmp_3.py 
8 ['teacher']
Nach dem Login kopieren

由上诉可见,teacher只出现在dir1,则会被抓取出来,所谓的leftright是相对于filecmp.dircmp而言的

dircmp.diff_files

返回不能匹配额文件

 1 # cat simple_filecmp_3.py 2  3 #!/usr/bin/env python 4  5 import filecmp 6  7 dir1 = "/root/python/d_2_filecmp/cmp/dir1/" 8  9 dir2 = "/root/python/d_2_filecmp/cmp/dir2/"10 11 dirobj = filecmp.dircmp(dir1,dir2)12 13 print (dirobj.diff_files)14 15 #print (dirobj.left_only)
Nach dem Login kopieren

执行结果

1 [root@localhost cmp]# ls dir1 dir22 dir1:3 hosts  ld.so.conf  sysconfig  teacher4 5 dir2:6 hosts  ld.so.conf  sysconfig7 [root@localhost cmp]# python simple_filecmp_3.py 
8 ['hosts']9 [root@localhost cmp]#
Nach dem Login kopieren

之前我们修改过hosts的文件,文件内容已经不一致,现在已经被抓取出来了

3.3.2 编写自动备份脚本

 1 # cat d_7_12_filecmp.py  2 #!/usr/bin/env python 3  4 import filecmp 5 import os 6 import sys 7 import shutil 8  9 source_files = "/root/python/d_2_filecmp/dir1"10 target_files = "/root/python/d_2_filecmp/dir2"11 12 def check_common_dirs(source_files,target_files):13     dirsobj = filecmp.dircmp(source_files , target_files)14 15     common_dirs_list = dirsobj.common_dirs16     17     for common_line in common_dirs_list :18         files_contrast('/'+source_files+'/'+common_line,'/'+target_files+'/'+common_line)19 20 def files_contrast(dir1,dir2) :21 22     dirobj = filecmp.dircmp(dir1,dir2)23 24     no_exists_files = dirobj.left_only25     no_diff_files = dirobj.diff_files26 27     for exists_files in no_exists_files :28         29         if os.path.isfile(exists_files) :30             shutil.copyfile ('/'+dir1+'/'+exists_files , '/'+dir2+'/'+exists_files)31         else :32             print ("%s is dirctory" %(exists_files))33             os.makedirs('/'+dir2+'/'+exists_files)34             print ("%s is mkdirs" %('/'+target_files+'/'+exists_files))35             36             try :37                 print ("values : %s %s" %('/'+dir1+'/'+exists_files , '/'+dir2+'/'+exists_files))38                 files_contrast('/'+dir1+'/'+exists_files , '/'+dir2+'/'+exists_files)39             except :40                 return 41 42     for diff_files in no_diff_files :43         if os.path.isfile(diff_files) :44             os.remove('/'+dir2+'/'+diff_files)45             shutil.copyfile ('/'+dir1+'/'+diff_files , '/'+dir2+'/'+diff_files)46 47 if os.path.exists(source_files) :48 49     if os.path.exists(target_files) == "False" :50         os.makedirs(target_files)51     52     files_contrast(source_files,target_files)    
53     check_common_dirs(source_files,target_files)54 55 else :56     print ("Soure files no exists")57     sys.exit()
Nach dem Login kopieren

3.4 执行脚本输出

3.4.1 查看文件

可知 dir2下没有任何文件

 1 # tree dir1/ dir2/ 2 dir1/ 3 ├── 123 4 │   └── 123456 5 ├── 4556 6 │   └── 789 7 │       └── d 8 ├── lcmp.py 9 ├── vnc.conf10 └── vnc.conf.bak11 dir2/12 13 3 directories, 5 files
Nach dem Login kopieren

3.4.2 执行脚本

 1 root@localhost d_2_filecmp]# python d_7_12_filecmp.py 
 2 4556 is dirctory 3 //root/python/d_2_filecmp/dir2/4556 is mkdirs 4 values : //root/python/d_2_filecmp/dir1/4556 //root/python/d_2_filecmp/dir2/4556 5 789 is dirctory 6 //root/python/d_2_filecmp/dir2/789 is mkdirs 7 values : ///root/python/d_2_filecmp/dir1/4556/789 ///root/python/d_2_filecmp/dir2/4556/789 8 d is dirctory 9 //root/python/d_2_filecmp/dir2/d is mkdirs10 values : ////root/python/d_2_filecmp/dir1/4556/789/d ////root/python/d_2_filecmp/dir2/4556/789/d11 123 is dirctory12 //root/python/d_2_filecmp/dir2/123 is mkdirs13 values : //root/python/d_2_filecmp/dir1/123 //root/python/d_2_filecmp/dir2/12314 123456 is dirctory15 //root/python/d_2_filecmp/dir2/123456 is mkdirs16 values : ///root/python/d_2_filecmp/dir1/123/123456 ///root/python/d_2_filecmp/dir2/123/123456
Nach dem Login kopieren

可以看出,备份的信息,前面的多个/可以不必理会,linux只识别一个/

3.4.3 查看备份效果

 1 # tree dir1/ dir2/ 2 dir1/ 3 ├── 123 4 │   └── 123456 5 ├── 4556 6 │   └── 789 7 │       └── d 8 ├── lcmp.py 9 ├── vnc.conf10 └── vnc.conf.bak11 dir2/12 ├── 12313 │   └── 12345614 ├── 455615 │   └── 78916 │       └── d17 ├── lcmp.py18 ├── vnc.conf19 └── vnc.conf.bak20 21 8 directories, 8 files
Nach dem Login kopieren

由上,可知,备份完全成功,针对于定时执行python脚本,可以将脚本写入crontab中,开启定时任务即可。

Das obige ist der detaillierte Inhalt vonEinfache Verwendung von filecmp in Python. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn

Heiße KI -Werkzeuge

Undresser.AI Undress

Undresser.AI Undress

KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover

AI Clothes Remover

Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool

Undress AI Tool

Ausziehbilder kostenlos

Clothoff.io

Clothoff.io

KI-Kleiderentferner

AI Hentai Generator

AI Hentai Generator

Erstellen Sie kostenlos Ai Hentai.

Heißer Artikel

R.E.P.O. Energiekristalle erklärten und was sie tun (gelber Kristall)
4 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Beste grafische Einstellungen
4 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. So reparieren Sie Audio, wenn Sie niemanden hören können
1 Monate vor By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Chat -Befehle und wie man sie benutzt
1 Monate vor By 尊渡假赌尊渡假赌尊渡假赌

Heiße Werkzeuge

Notepad++7.3.1

Notepad++7.3.1

Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version

SublimeText3 chinesische Version

Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1

Senden Sie Studio 13.0.1

Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6

Dreamweaver CS6

Visuelle Webentwicklungstools

SublimeText3 Mac-Version

SublimeText3 Mac-Version

Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

PHP und Python: Vergleich von zwei beliebten Programmiersprachen PHP und Python: Vergleich von zwei beliebten Programmiersprachen Apr 14, 2025 am 12:13 AM

PHP und Python haben jeweils ihre eigenen Vorteile und wählen nach den Projektanforderungen. 1.PHP ist für die Webentwicklung geeignet, insbesondere für die schnelle Entwicklung und Wartung von Websites. 2. Python eignet sich für Datenwissenschaft, maschinelles Lernen und künstliche Intelligenz mit prägnanter Syntax und für Anfänger.

Wie Debian Readdir sich in andere Tools integriert Wie Debian Readdir sich in andere Tools integriert Apr 13, 2025 am 09:42 AM

Die Readdir -Funktion im Debian -System ist ein Systemaufruf, der zum Lesen des Verzeichnisgehalts verwendet wird und häufig in der C -Programmierung verwendet wird. In diesem Artikel wird erläutert, wie Readdir in andere Tools integriert wird, um seine Funktionalität zu verbessern. Methode 1: Kombinieren Sie C -Sprachprogramm und Pipeline zuerst ein C -Programm, um die Funktion der Readdir aufzurufen und das Ergebnis auszugeben:#include#include#includeIntmain (intargc, char*argv []) {Dir*Dir; structDirent*Eintrag; if (argc! = 2) {{

Python und Zeit: Machen Sie das Beste aus Ihrer Studienzeit Python und Zeit: Machen Sie das Beste aus Ihrer Studienzeit Apr 14, 2025 am 12:02 AM

Um die Effizienz des Lernens von Python in einer begrenzten Zeit zu maximieren, können Sie Pythons DateTime-, Zeit- und Zeitplanmodule verwenden. 1. Das DateTime -Modul wird verwendet, um die Lernzeit aufzuzeichnen und zu planen. 2. Das Zeitmodul hilft, die Studie zu setzen und Zeit zu ruhen. 3. Das Zeitplanmodul arrangiert automatisch wöchentliche Lernaufgaben.

So konfigurieren Sie den HTTPS -Server in Debian OpenSSL So konfigurieren Sie den HTTPS -Server in Debian OpenSSL Apr 13, 2025 am 11:03 AM

Das Konfigurieren eines HTTPS -Servers auf einem Debian -System umfasst mehrere Schritte, einschließlich der Installation der erforderlichen Software, der Generierung eines SSL -Zertifikats und der Konfiguration eines Webservers (z. B. Apache oder NGINX) für die Verwendung eines SSL -Zertifikats. Hier ist eine grundlegende Anleitung unter der Annahme, dass Sie einen Apacheweb -Server verwenden. 1. Installieren Sie zuerst die erforderliche Software, stellen Sie sicher, dass Ihr System auf dem neuesten Stand ist, und installieren Sie Apache und OpenSSL: sudoaptupdatesudoaptupgradesudoaptinsta

Gitlabs Plug-in-Entwicklungshandbuch zu Debian Gitlabs Plug-in-Entwicklungshandbuch zu Debian Apr 13, 2025 am 08:24 AM

Die Entwicklung eines Gitlab -Plugins für Debian erfordert einige spezifische Schritte und Kenntnisse. Hier ist ein grundlegender Leitfaden, mit dem Sie mit diesem Prozess beginnen können. Wenn Sie zuerst GitLab installieren, müssen Sie GitLab in Ihrem Debian -System installieren. Sie können sich auf das offizielle Installationshandbuch von GitLab beziehen. Holen Sie sich API Access Token, bevor Sie die API -Integration durchführen. Öffnen Sie das GitLab -Dashboard, finden Sie die Option "AccessTokens" in den Benutzereinstellungen und generieren Sie ein neues Zugriffs -Token. Wird generiert

Welcher Dienst ist Apache Welcher Dienst ist Apache Apr 13, 2025 pm 12:06 PM

Apache ist der Held hinter dem Internet. Es ist nicht nur ein Webserver, sondern auch eine leistungsstarke Plattform, die enormen Datenverkehr unterstützt und dynamische Inhalte bietet. Es bietet eine extrem hohe Flexibilität durch ein modulares Design und ermöglicht die Ausdehnung verschiedener Funktionen nach Bedarf. Modularität stellt jedoch auch Konfigurations- und Leistungsherausforderungen vor, die ein sorgfältiges Management erfordern. Apache eignet sich für Serverszenarien, die hoch anpassbare und entsprechende komplexe Anforderungen erfordern.

In welcher Sprache wird Apache geschrieben? In welcher Sprache wird Apache geschrieben? Apr 13, 2025 pm 12:42 PM

Apache ist in C geschrieben. Die Sprache bietet Geschwindigkeit, Stabilität, Portabilität und direkten Zugriff auf Hardware, wodurch es für die Entwicklung von Webserver ideal ist.

PHP und Python: Code Beispiele und Vergleich PHP und Python: Code Beispiele und Vergleich Apr 15, 2025 am 12:07 AM

PHP und Python haben ihre eigenen Vor- und Nachteile, und die Wahl hängt von den Projektbedürfnissen und persönlichen Vorlieben ab. 1.PHP eignet sich für eine schnelle Entwicklung und Wartung großer Webanwendungen. 2. Python dominiert das Gebiet der Datenwissenschaft und des maschinellen Lernens.

See all articles