Как запустить скрипт Python из контекстного меню текстового файла и сравнить его с другими текстовыми файлами? - PullRequest
0 голосов
/ 15 января 2019

Я написал скрипт на python, который принимает два файла в качестве входных данных и затем сохраняет разницу между ними в качестве выходных данных в другом файле.

Я привязал его к пакетному файлу .cmd (см. Ниже) и добавил пакетный файл в контекстное меню текстовых файлов, поэтому, когда я щелкаю правой кнопкой мыши текстовый файл и выбираю его, появляется окно cmd и я набираю адрес файла для сравнения.

Содержимое пакетного файла:

@echo off
cls
python "C:\Users\User\Desktop\Difference of Two Files.py" %1

Код Python:

import sys
import os

f1 = open(sys.argv[1], 'r')
f1_name = str(os.path.basename(f1.name)).rsplit('.')[0]

f2_path = input('Enter the path of file to compare: ')
f2 = open(f2_path, 'r')
f2_name = str(os.path.basename(f2.name)).rsplit('.')[0]

f3 = open(f'{f1_name} - {f2_name} diff.txt', 'w')
file1 = set(f1.read().splitlines())
file2 = set(f2.read().splitlines())

difference = file1.difference(file2)

for i in difference:
    f3.write(i + '\n')

f1.close()
f2.close()
f3.close()

Теперь мой вопрос: как я могу заменить ввод 2-го пути файла решением для перетаскивания, которое принимает более одного файла.

У меня нет проблем с кодом на Python, и я могу сам расширить его, добавив больше файлов. Я просто не знаю, как редактировать командный файл, поэтому вместо того, чтобы брать только один файл путем ввода пути, он перетаскивает несколько файлов.

Буду признателен за вашу помощь.

1 Ответ

0 голосов
/ 15 января 2019

Наконец-то я сам это понял! Выкладываю окончательный код, может кому-нибудь это поможет.

# This script prints those lines in the 1st file that are not in the other added files
# and saves the results into a 3rd file on Desktop.

import sys
import os


f1 = open(sys.argv[1], 'r')
f1_name = str(os.path.basename(f1.name)).rsplit('.')[0]
reference_set = set(f1.read().splitlines())

compare_files = input('Drag and drop files into this window to compare: ')
compare_files = compare_files.strip('"').rstrip('"')
compare_files_list = compare_files.split('\"\"')
compare_set = set()

for file in compare_files_list:
    with open(os.path.abspath(file), 'r') as f2:
        file_content = set(f2.read().splitlines())
    compare_set.update(file_content)


f3 = open(f'C:\\Users\\User\\Desktop\\{f1_name} diff.txt', 'w')

difference = reference_set.difference(compare_set)

for i in difference:
    f3.write(i + '\n')

f1.close()
f3.close()

Идея возникла из-за того, что перетаскивание в cmd копирует путь файла, заключенный в двойные кавычки. Я использовал повторяющиеся двойные кавычки между путями для создания списка, а остальное вы можете увидеть в коде. Однако есть и обратная сторона: нельзя объединять несколько файлов, и вы должны делать это один за другим, но это лучше, чем ничего. ;)

...