2015-08-06 2 views
1

У меня есть два файла в разных местах: /tmp/helpers_image.tif и /tmp/outputs/helpers_image.qml. Я хочу сравнить их имена перед расширением.Сравнение двух имен файлов в разных папках

Как сравнить файлы в этих двух папках?

Если эти файлы находятся в той же папке, я мог бы использовать:

t1 = 'helpers_image.qml' 
t1_list= t1.split('.') 
t1_list[0] == t2_list[0] 

... считая другой список будет называться t2.

ответ

4

Вы должны использовать функцию os.path.basename, чтобы получить имя файла независимо от того, в каких папках они находятся. Здесь вы идете:

import os 

filename1 = os.path.basename('/tmp/helpers_image.tif') # returns 'helpers_image.tif' 
filename2 = os.path.basename('/tmp/outputs/helpers_image.qml') # return 'helpers_image.qml' 

# Thanks to Cyrbil for noticing a bug here 
name1 = filename1.rsplit('.', 1)[0] # returns 'helpers_image' 
name2 = filename2.rsplit('.', 1)[0] # return 'helpers_image' 

if name1 == name2: # This is True for this exact case 
    # your logic here 

Другой способ заключается в suggested by Dunes:

name1 = os.path.basename(os.path.splitext('/tmp/helpers_image.tif')[0]) 
name2 = os.path.basename(os.path.splitext('/tmp/outputs/helpers_image.qml')[0]) 
+1

Вы можете переработать раскол как для файла, как 'моей. file.txt' он не работает. ''my.file.txt'.rsplit ('. ', 1) [0]' – Cyrbil

+0

@Cyrbil благодарит много, исправлено. – bagrat

+2

Также как и 'rsplit', есть также' os.path.splitext'. – Dunes

2

В дополнение к этому, если вы обнаружите, что вам нужно, чтобы соответствовать несколько имен файлов, то вы можете использовать наборы.

files1 = ['helpers_image1.qml', 'helpers_image2.qml', 'helpers_image3.qml', 'helpers_imag4.qml'] 
files2 = ['helpers_image2.qml', 'helpers_image3.qml'] 
print set(files1).intersection(set(files2)) 

Выходы:

набор ([ 'helpers_image3.qml', 'helpers_image2.qml'])

+0

«Я хочу сравнить их имена перед расширением *» – cdarke

+0

Ой, спасибо за это! Ответ Кирбиля в этом прекрасен. –

+0

Upvote для ответа на неправильный вопрос, который оказался моим текущим. Noice! – lukehawk

Смежные вопросы