仅按 NAME 进行比较,而不是使用现有代码按 NAME + EXTENSION 进行比较; Python 3.x
Compare by NAME only, and not by NAME + EXTENSION using existing code; Python 3.x
python 3.x 代码(如下所列)在比较来自两个不同目录(Input_1 和 Input_2)的文件和查找文件方面做得很好匹配(两个目录之间相同)。有没有一种方法可以更改现有代码(如下)以查找仅在两个目录之间按名称相同的文件。 (即仅按名称而不是名称 + 扩展名查找匹配项)?
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 以某种方式仅按名称比较文件并将其 return "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()):
你的代码运行得很好!再次感谢无限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])
python 3.x 代码(如下所列)在比较来自两个不同目录(Input_1 和 Input_2)的文件和查找文件方面做得很好匹配(两个目录之间相同)。有没有一种方法可以更改现有代码(如下)以查找仅在两个目录之间按名称相同的文件。 (即仅按名称而不是名称 + 扩展名查找匹配项)?
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 以某种方式仅按名称比较文件并将其 return "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()):
你的代码运行得很好!再次感谢无限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])