2016-09-22 1 views
0

Я новичок в python. Я пишу скрипт python, чтобы найти diff между 2 html file1: beta.vidup.me-log-2016-09-21-17: 43: 28.html и file2: beta.vidup.me-log-2016-09 -21-17: 47: 48.html.Невозможно закодировать файлы для выполнения diff в python

Чтобы получить представление о моей файловой системе, у меня есть 2 каталога 2016-09-21 и 2016-09-22. file1: beta.vidup.me-log-2016-09-21-17: 43: 28.html присутствует в файлах dir1 и file2: beta.vidup.me-log-2016-09-21-17: 47: 48. html присутствует в каталоге dir2.

Ниже мой сниппет:

dir1 = raw_input("Enter date of Archive folder to compare with in format yyyy-mm-dd---->\n") 
dir2 = raw_input("Enter date of folder to compare in format yyyy-mm-dd----->\n") 

now = datetime.now() 
folder_output = '/home/diff_output/{}'.format(now.strftime('%Y-%m-%d')) 

mkdir(folder_output) 

fname1 = '/home/output/%s/beta.vidup.me-log-2016-09-21-17:43:28.html'%dir1 
fname2 = '/home/output/%s/beta.vidup.me-log-2016-09-21-17:47:48.html'%dir2 

# Open file for reading in text mode (default mode) 
f1 = open(fname1) 
f2 = open(fname2) 

cmd = "diff "+fname1+'\t'+fname2 
curl = subprocess.Popen(cmd,shell=True,stdout=subprocess.PIPE) 

file_data = curl.stdout.read() 
print file_data 

fname1.close() 
fname2.close() 

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

Я хочу, чтобы мой код принимал fname1 из dir1 и fname2 из dir2 и выполнял diff и выводил его в папку, а Loop back, еще раз.

Спасибо за ваше время и совет заранее.

+1

У вас есть вопросы? См. [Ask]. –

+0

Приношу свои извинения. Я отредактировал мой вопрос – nits

+0

Вам не нужно открывать файлы. Кроме того, это должно быть 'f1.close()', а не 'fname1.close()'. – Barmar

ответ

0

Ниже приведены функции, которые вам нужны с примерами. Объедините их с помощью логики с циклом for.

Вы можете использовать subprocess.check_output() для получения результата из команды. Попробуйте:

cmd = ["diff", fname1, +fname2] 
output = subprocess.check_output(cmd) 
print output 

, если вы хотите, чтобы написать это в файл:

with open('/paht/to/file', 'w+') as f: 
    f.write(output) 

Для того, чтобы получить список файлов в каталоге, используйте listdir(), isfile и join функции из os модуля. Например:

from os import listdir 
from os.path import isfile, join 
only_files = [f for f in listdir('path') if isfile(join('path', f))] 
# only_files will contain list of all files in 'path' path 

Как вы сказали, вы не имеете много представления о цикле. Чтобы дать вам основную идею о том, как должен работать ваш цикл. Ниже приведен пример (вместо копирования, попытайтесь понять каждую линию, это будет полезно для вас в будущем.):

for f1, f2 in zip(file_list_1, file_list_2): # takes first, second, etc files corresponding to each list 
    output = subprocess.check_output(['diff', f1, f2]) # generate diff of both file 
    with open('diff-{}-{}'.format(f1, f2), 'w+') as f: 
     f.write(output) # write the diff to third file 

Изменение выше логики согласно вашему требованию.

+0

Привет Moinuddin, оцените ваш ответ. Однако я могу выполнить diff, но я не очень силен в функциях цикла. Я хочу, чтобы петля, чтобы выбрать новые файлы для fname1 и fname2 из 2 разных папок – nits

+0

Обновлен ответ. Вам также нужно 'os.listdir()' получить все файлы в папке –

+0

Большое спасибо за listdir() и Zip(). это работает как чудеса. – nits

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