我是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
提前感谢您的时间和建议。
答案 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()
,isfile
和join
函数。例如:
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
根据您的要求修改上述逻辑。