python 3.x代码(下面列出(在比较来自两个不同目录(Input_1和Input_2(的文件以及查找匹配的文件(两个目录之间相同(方面做得很好。有没有一种方法可以改变现有的代码(如下(,以在两个目录之间找到相同的BY NAME ONLY文件。(即仅按名称而非名称+扩展名查找匹配项(?
comparison = filecmp.dircmp(Input_1, Input_2) #Specifying which directories to compare
common_files = ', '.join(comparison.common) #Finding the common files between the directories
TextFile.write("Common Files: " + common_files + 'n') # Writing the common files to a new text file
- 示例:
- 目录1包含:Tacoma.xlsx、Prius.txt、Landcruiser.txt
- 目录2包含:Tacoma.doc、Avalon.xlsx、Rav4.doc
"TACOMA"是两个不同的文件(不同的扩展名(。我可以以某种方式使用basename或splitext只按名称比较文件,并让它返回"TACOMA"作为匹配文件吗?
要获取文件名,请尝试:
from os import path
fil='..file.doc'
fil_name = path.splitext(fil)[0].split('\')[-1]
这将file
存储在file_name
中。因此,要比较文件,请运行:
from os import listdir , path
from os.path import isfile, join
def compare(dir1,dir2):
files1 = [f for f in listdir(dir1) if isfile(join(dir1, f))]
files2 = [f for f in listdir(dir2) if isfile(join(dir2, f))]
common_files = []
for i in files1:
for j in files2:
if(path.splitext(i)[0] == path.splitext(j)[0]): #this compares it name by name.
common_files.append(i)
return common_files
现在就叫它:
common_files = compare(dir1,dir2)
正如您所知,python是区分大小写的,如果您想要通用文件,无论它们是否包含大写字母或小写字母,那么不要使用:
if(path.splitext(i)[0] == path.splitext(j)[0]):
用途:
if(path.splitext(i)[0].lower() == path.splitext(j)[0].lower()):
你的代码工作得很好!再次感谢您,Infinity TM!代码的最终用途如下,供其他人查看。(注意:Input_3和Input_4是目录(
def Compare():
Input_3 = #Your directory here
Input_4 = #Your directory here
files1 = [f for f in listdir(Input_3) if isfile(join(Input_3, f))]
files2 = [f for f in listdir(Input_4) if isfile(join(Input_4, f))]
common_files = []
for i in files1:
for j in files2:
if(path.splitext(i)[0].lower() == path.splitext(j)[0].lower()):
common_files.append(path.splitext(i)[0])