Python - 多个文件比较后,将结果写入多个文件

标签 python

我有3个文件文件夹,我需要将folder1和folder2中的文件一个一个比较,然后将不同的结果一个一个写入到folder3中的文件中。现在我有这样的脚本:

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

最佳答案

仅使用一个参数的 open 假定 r 模式,您使用 with open (file_3_path) 作为结果:。自然地,在读取模式下对文件对象使用 write 是行不通的。将其更改为 with open (file_3_path, 'w') as result: 并且文件将是可写的。在上下文中:

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, 'w') 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))

关于Python - 多个文件比较后,将结果写入多个文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43906120/

相关文章:

python - 使用 Python 创建代理以将 NTLM 凭据传递给另一个代理

python - 马与主教的最少步数

python - 如何在测试 FastAPI 应用程序时触发生命周期启动和关闭?

python - 如何修改 gzip 压缩的 tar 文件中的文件?

python - Yampy导入错误: no module named 'authenticator'

javascript - 如何使用 selenium 在 python 中执行 Javascript 函数

python 字典/json 初始

Python:如何将用户输入中的文本与文本文件或mysql数据库中的内容进行比较?

Python:为什么使用 re.IGNORECASE 编译的正则表达式会删除第一个字符?

python - 如何将类型为 "object"的时间戳列转换为正确的 "time"类型?