39

2 つの異なるファイルがあり、それらの内容を行ごとに比較し、共通の内容を別のファイルに書き込みたいと考えています。どちらにも空白が含まれていることに注意してください。ここに私の疑似コードがあります:

file1 = open('some_file_1.txt', 'r')
file2 = open('some_file_2.txt', 'r')
FO = open('some_output_file.txt', 'w')

for line1 in file1:
    for line2 in file2:
        if line1 == line2:
            FO.write("%s\n" %(line1))

FO.close()
file1.close()
file2.close()

しかし、これを行うと、 FOファイルに多くの空白ができてしまいます。よくある空白も書かれているようです。テキスト部分だけ書きたい。誰か助けてください。

例: 最初のファイル (file1) には次のデータが含まれています。

Config:
Hostname = TUVALU

BT:
TS_Ball_Update_Threshold = 0.2

BT:
TS_Player_Search_Radius = 4

BT:
Ball_Template_Update = 0

2 番目のファイル (file2) にはデータが含まれています。

Pole_ID      = 2
Width        = 1280
Height       = 1024
Color_Mode   = 0
Sensor_Scale = 1

Tracking_ROI_Size = 4
Ball_Template_Update = 0

気がつけば、各ファイルの最後の 2 行は同じなので、このファイルをFOファイルに書きたいと思います。しかし、私のアプローチの問題は、共通の空白スペースも書き込むことです。この問題には正規表現を使用する必要がありますか? 私は正規表現の経験がありません。

4

7 に答える 7

93

このソリューションは、両方のファイルを 1 回のパスで読み取り、空白行を除外し、ファイル内の位置に関係なく共通行を出力します。

with open('some_file_1.txt', 'r') as file1:
    with open('some_file_2.txt', 'r') as file2:
        same = set(file1).intersection(file2)

same.discard('\n')

with open('some_output_file.txt', 'w') as file_out:
    for line in same:
        file_out.write(line)
于 2013-09-25T14:36:53.683 に答える
7

ファイル間の順序が保持されている場合は、difflib. Robᵩ の結果は交差点の正真正銘の標準ですが、実際には大まかな diff のようなものを探しているかもしれません。

from difflib import Differ

with open('cfg1.txt') as f1, open('cfg2.txt') as f2:
    differ = Differ()

    for line in differ.compare(f1.readlines(), f2.readlines()):
        if line.startswith(" "):
            print(line[2:], end="")

つまり、この例では同じ出力が生成されますが、これは要求したものとは異なる動作をします (順序が重要です)。

于 2013-09-25T14:45:45.993 に答える
1

これを試して:

from __future__ import with_statement

filename1 = "G:\\test1.TXT"
filename2 = "G:\\test2.TXT"


with open(filename1) as f1:
   with open(filename2) as f2:
      file1list = f1.read().splitlines()
      file2list = f2.read().splitlines()
      list1length = len(file1list)
      list2length = len(file2list)
      if list1length == list2length:
          for index in range(len(file1list)):
              if file1list[index] == file2list[index]:
                  print file1list[index] + "==" + file2list[index]
              else:                  
                  print file1list[index] + "!=" + file2list[index]+" Not-Equel"
      else:
          print "difference inthe size of the file and number of lines"
于 2016-12-15T17:07:15.703 に答える