【问题标题】:Unable to loop the files to perform diff in python无法循环文件以在 python 中执行差异
【发布时间】:2016-09-22 20:31:29
【问题描述】:

我是 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 中。

下面是我的sn-p:

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

我希望只使用 subprocess 模块来执行 diff。

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

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

【问题讨论】:

  • 您有问题吗?见How to Ask
  • 我很抱歉。我编辑了我的问题
  • 您不需要打开这些文件。此外,它应该是f1.close(),而不是fname1.close()

标签: python subprocess diff


【解决方案1】:

以下是您需要的示例函数。使用 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

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

【讨论】:

  • 您好 Moinuddin,感谢您的回复。但是我能够执行差异,但我不擅长循环功能。我希望循环从 2 个不同的文件夹中为 fname1 和 fname2 选择新文件
  • 更新了答案。您还需要os.listdir() 才能获取文件夹中的所有文件
  • 非常感谢 listdir() 和 Zip() 。它就像奇迹一样工作。
猜你喜欢
  • 2013-07-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-12-06
  • 1970-01-01
相关资源
最近更新 更多