无法循环文件以在python中执行diff

时间:2016-09-22 20:31:30

标签: python subprocess diff

我是python的新手。我正在编写一个python脚本来查找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

要了解我的文件组织:我有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()

我希望仅使用子进程模块执行diff。

我希望我的代码从dir1获取fname1,从dir2获取fname2并执行diff并将其输出到文件夹并循环返回以在dir1中为fname1选择下一个文件,从dir2为fname2选择下一个文件并再次执行diff

提前感谢您的时间和建议。

1 个答案:

答案 0 :(得分: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

根据您的要求修改上述逻辑。