Сравнение только по ИМЯ, а не по ИМЯ + РАСШИРЕНИЕ, используя существующий код; Python 3.х - PullRequest
0 голосов
/ 08 апреля 2020

Код 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. Пример:
    • Каталог 1 содержит : Tacoma.xlsx, Prius. txt, Landcruiser.txt
    • Каталог 2 содержит : Tacoma.do c, Avalon.xlsx, Rav4.do c

«TACOMA» - это два разных файла (разные расширения). Могу ли я использовать базовое имя или сплитекст для сравнения файлов только по имени и вернуть «TACOMA» в качестве соответствующего файла?

1 Ответ

1 голос
/ 08 апреля 2020

Чтобы получить имя файла, попробуйте:

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])

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...