2016-08-20 7 views
1

私はPythonには新しく2つのファイルの比較に問題があり、出力をブール形式で取得しています。私はここでいくつかの推奨事項を見たことがありますが、アプリケーションの知識が少ないため、私はまだ取得できないと思います。2つのファイルの行が互いに含まれているかどうかをチェックする方法

ACCESS_COARSE_LOCATION 
ACCESS_FINE_LOCATION 
ACCESS_NETWORK_STATE 
BLUETOOTH 
CAMERA 
CHANGE_WIFI_STATE 
EXPAND_STATUS_BAR 
GET_ACCOUNTS 
GET_TASKS 
MANAGE_DOCUMENTS 
READ_EXTERNAL_STORAGE 
READ_LOGS 
RECORD_AUDIO 
SET_WALLPAPER 
USE_CREDENTIALS 
VIBRATE 
WRITE_CALENDAR 

2NDテキストファイルのファイルperm.txt:

GET_TASKS 
EXPAND_STATUS_BAR 
SET_WALLPAPER 
CAMERA 
MANAGE_DOCUMENTS 
READ_EXTERNAL_STORAGE 
ACCESS_COARSE_LOCATION 
ACCESS_FINE_LOCATION 
CHANGE_WIFI_STATE 
VIBRATE 
RECORD_AUDIO 

op3.txt私は比較する必要がこれらの二つのパーミッション関連のテキストファイルは

1STテキストファイルを比較する必要があります2番目のファイルのパーミッションと2番目のファイルのパーミッションが同じかどうか比較します。 '0'または 'False'でない場合は '1'または 'True'になります。

私は以下のコード

f1 = open('op2.txt', 'r') 
f2 = open('permissions.txt', 'r') 
FO = open('out1.txt', 'w') 

for line1 in sorted(f2): 
    if line1 is f1: 
     FO.write(line1 + "True" + '\n') 
    else: 
     FO.write(line1 + "False" + '\n') 

FO.close() 
f1.close() 
f2.close() 

私は、これはintially私はdiffの方法で試みたが、それは最終的に私はこの時点

で、ここで打た取得couldntの二、三の許可のための出力を得ることができたようにしようとした別の試みで試してみました
fname1 = input("Enter the first filename: ") 
fname2 = input("Enter the second filename: ") 


f1 = open(fname1) 
f2 = open(fname2) 


print("-----------------------------------") 
print("Comparing files ", " > " + fname1, " < " + fname2, sep='\n') 
print("-----------------------------------") 


f1_line = f1.readline() 
f2_line = f2.readline() 

line_no = 1 

# Loop if either file1 or file2 has not reached EOF 
while f1_line != '' or f2_line != '': 


f1_line = f1_line.rstrip() 
f2_line = f2_line.rstrip() 


if f1_line != f2_line: 

    # If a line does not exist on file2 then mark the output with false 
    if f2_line == '' and f1_line != '': 
     print("false", "Line-%d" % line_no, f1_line) 
    # otherwise output the line on file1 and mark it with > sign 
    elif f1_line != '': 
     print("True", "Line-%d" % line_no, f1_line) 



    # Print a blank line 
    print() 

# Read the next line from the file 
f1_line = f1.readline() 
f2_line = f2.readline() 


line_no += 1 


f1.close() 
f2.close() 
+0

これはAndroidとどのように関係していますか? – greenapps

+1

'set(file1)== set(file2)' ?? –

+1

可能性のある複製http://stackoverflow.com/questions/19007383/compare-two-different-files-line-by-line-in-python –

答えて

0

に変更、perm.txtからop3.txtに違いを確認するために、これを行うための一つの方法は以下の通りです:

ACCESS_COARSE_LOCATION True 
ACCESS_FINE_LOCATION True 
ACCESS_NETWORK_STATE False 
BLUETOOTH False 
CAMERA True 
CHANGE_WIFI_STATE True 
EXPAND_STATUS_BAR True 
GET_ACCOUNTS False 
GET_TASKS True 
MANAGE_DOCUMENTS True 
READ_EXTERNAL_STORAGE True 
READ_LOGS False 
RECORD_AUDIO False 
SET_WALLPAPER True 
USE_CREDENTIALS False 
VIBRATE True 
WRITE_CALENDAR False 
:下回る必要がありますout.txtを

f1 = open('perm.txt', 'rb') 
f2 = open('op3.txt', 'rb') 
f1_lines = f1.readlines() 
f2_lines = f2.readlines() 
f1.close() 
f2.close() 
overall_compare_result = True 
fo = open('out1.txt', 'w') 
for each in f1_lines: 
    if each in f2_lines: 
     fo.write(each.strip() + ' True\n') 
    else: 
     fo.write(each.strip() + ' False\n') 
     if overall_compare_result: 
      overall_compare_result = False 
fo.close() 
print("overall comparision result: " + str(overall_compare_result)) 

+0

Thanqの兄はそれを持っています.... –

+0

@muppavaramkireetこれがあなたの目的に役立っているなら、あなたは答えとしてこれを受け入れてupvoteできますか? –

+0

私は、この答えはすべての中で最も長く、最も効率的ではないと言わなければなりません。 –

1

高速で素早い文字列比較が必要な場合は、なぜハッシュ(md5/sha1)を使用しないのですか?

ソート行は、このようなものを使用します。

import md5 

m1 = md5.md5(file1_str) 
m2 = md5.md5(file2_str) 

if m1.hexdigest() == m2.hexdigest(): 
    .... 
else: 
    .... 
+0

私はこれが計算上の複雑さの点で巨大な過度のものだと思います。 –

+0

MD5の計算量はO(N)なので、それは "巨大な"過大評価ではないかと思います。 – Protostome

+0

まあ、 "線を並べ替える"は超線形であり、md5は高い定数を持つ線形です。私はまた、セットを使用するよりも実際には短くて簡単だとは思わない。それは正当な答えだから、それをdownvoteしなかった。 –

1

機能

get_line_set = lambda f_name: set([l.strip() for l in open(f_name, 'r')]) 

f_nameのラインのsetを作成します。

は今、あなたはちょうどまた

get_line_set('perm.txt') == get_line_set('op3.txt') 

を使用することができ、セットを使用すると、等々交差点、違い、対称差などを見ることができます。例えば、ちょうど

get_line_set('perm.txt').difference(get_line_set('op3.txt')) 
関連する問題