2
我有3個文件夾供我使用,我需要逐個比較文件夾1和文件夾2中的文件,然後逐個將結果寫入文件夾3中的文件。現在我有這樣的腳本:Python - 在多個文件比較後,將結果寫入多個文件
import os
import difflib
import sys
path1 = "D:\folder1"
path2 = "D:\folder2"
path3 = "D:\folder3"
dirs1 = os.listdir(path1)
dirs2 = os.listdir(path2)
dirs3 = os.listdir(path3)
for file_name in dirs1:
file_1_path = os.path.join(path1, file_name)
name,ext = os.path.splitext(file_name)
file_2_path = os.path.join(path2, name+str(1)+ext)
file_3_path = os.path.join(path3, name+str('-Result')+ext)
with open (file_1_path) as xmlfile1:
with open (file_2_path) as xmlfile2:
line_num1=sum(1 for line1 in xmlfile1)
line_num2=sum(1 for line2 in xmlfile2)
xmlfile1.seek(0)
xmlfile2.seek(0)
diffInstance = difflib.Differ()
diffList = list(diffInstance.compare(xmlfile1.readlines(), xmlfile2.readlines()))
with open (file_3_path) as result:
for i,line in enumerate(diffList):
result.write(line)
if line_num1 == line_num2:
if line.startswith('+'):
sys.stdout.write('Current version Line: {} , text: {}'.format(i-1,line))
elif line.startswith('-'):
sys.stdout.write('Previous version Line: {}, text: {}'.format(i+1,line))
if line_num1 > line_num2:
x = line_num1-line_num2
if line.startswith('-'):
sys.stdout.write('Missed Line: {} from previous version, text: {}'.format(i+1,line))
if line_num1<line_num2:
y = line_num2-line_num1
if line.startswith('+'):
sys.stdout.write('Extra Line: {} in currect version, text: {}'.format(i+1,line))
,但似乎效果不好,我得到的錯誤是這樣的:
Traceback (most recent call last):
File "C:/comparison.py", line 25, in <module>
result.write(line)
io.UnsupportedOperation: not writable
您是否有權寫入第三個目錄?你可以在那裏創建一個文件,看看你是否真的可以寫嗎? – Colwin
是的,我這樣做,如果我只是比較兩個文件與自己的路徑輸入,我可以正確地得到結果,現在我只是改變我的腳本,使其更自動,沒有輸入自己的文件路徑 – Emily