2016-09-22 13 views
0

我是python的新手。我正在編寫一個python腳本來查找2 html文件1之間的差異:beta.vidup.me-log-2016-09-21-17:43:28.html和file2:beta.vidup.me-log-2016-09 -21-17:47:48.html。無法循環文件以執行python中的diff

給我一個關於我的文件組織的想法:我有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() 

我只想用子模塊執行差異。

我希望我的代碼從dir1中獲取fname1,並從dir2中獲取fname2,並執行diff並將其輸出到文件夾,然後循環返回以選擇dir1中的下一個文件作爲fname1,並從dir2中選擇下一個文件作爲fname2,並執行diff再次。

感謝您的時間和建議提前。

+1

你有問題嗎?見[問]。 –

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

爲了獲取文件的列表目錄,使用os模塊的listdir()isfilejoin功能。例如:

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,感謝您的回覆。但是我能夠執行差異,但是我在循環函數中並不強壯。我希望循環爲來自2個不同文件夾的fname1和fname2挑選新文件 – nits

+0

更新了答案。您還需要'os.listdir()'獲取文件夾中的所有文件 –

+0

非常感謝listdir()和Zip()。它像奇蹟般運作。 – nits