0

重複の可能性:
2 つの異なるファイルを行ごとに比較し、違いを 3 番目のファイルに書き込む - Python

私の頭の中のロジックは次のように機能します... for line in import_file check に既存のユーザー文字列リストのアイテムが含まれているかどうかを確認し、そのリストのアイテムのいずれかが含まれている場合は、その行を削除しますファイル。

filenew = open('new-user', 'r')
filexist = open('existing-user', 'r')
fileresult = open('result-file', 'r+')
xlines = filexist.readlines()
newlines = filenew.readlines()
for item in newlines:
    if item contains an item from xlines
        break
    else fileresult.write(item)
filenew.close()
filexist.close()
fileresult.close()

私はこのコードがすべてジャッキアップされていることを知っていますが、おそらくあなたは私を正しい方向に向けることができます.

ありがとう!

編集 - -

これは私の既存のユーザーファイルの内容の例です....

allyson.knanishu
amy.curtiss
amy.hunter
amy.schelker
andrea.vallejo
angel.bender
angie.loebach

これが私の新しいユーザーファイルの内容の例です....

aimee.neece,aimee,neece,aimee.neece@faculty.asdf.org,aimee neece,aimee neece,"CN=aimee neece,OU=Imported,dc=Faculty,dc=asdf,dc=org"
alexis.andrews,alexis,andrews,alexis.andrews@faculty.asdf.org,alexis andrews,alexis andrews,"CN=alexis andrews,OU=Imported,dc=Faculty,dc=asdf,dc=org"
alice.lee,alice,lee,alice.lee@faculty.asdf.org,alice lee,alice lee,"CN=alice lee,OU=Imported,dc=Faculty,dc=asdf,dc=org"
allyson.knanishu,allyson,knanishu,allyson.knanishu@faculty.asdf.org,allyson knanishu,allyson knanishu,"CN=allyson knanishu,OU=Imported,dc=Faculty,dc=asdf,dc=org"

@mikebabcock からの新しいコード ... ありがとう。

outfile = file("result-file.txt", "w")
lines_to_check_for = [ parser(line) for line in file("existing-user.txt", "r") ]
for line in file("new-user.txt", "r"):
    if not parser(line) in lines_to_check_for:
        outfile.write(line)

パーサーのインポート ステートメントを追加しました...次のエラーが表示されます...

C:\temp\ad-import\test-files>python new-script.py
Traceback (most recent call last):
  File "new-script.py", line 7, in <module>
    lines_to_check_for = [ parser(line) for line in file("existing-user.txt", "r
     ") ]
  TypeError: 'module' object is not callable

ありがとう!

4

3 に答える 3

3

私はあなたが何をしたいのかを理解していると仮定して....セット交差点を使用してください:)

for line in newlines:
    if set(line.split()) & set(xlines): #set intersection
        print "overlap between xlines and current line"
        break
    else:
        fileresult.write(item)
于 2012-10-15T19:02:17.963 に答える
1

入力ファイルの形式が 1 行に 1 項目である場合 (readlines リスト内の既存の要素のチェックに問題がないため)、リスト メンバーシップ テストを探しています。

if item in xlines:
    break

いくつかのより多くのpythonのものを指すには:メンバーシップをテストするリストからセットを作成します(リストの場合のように、テストは線形ではなく対数時間になるため):

xlines = set(filexists.readlines())

また、 with ステートメントを使用して、ファイルを閉じることを回避し、より明確なコードを提供することもできます (ここの最初の例のように)。

于 2012-10-15T19:10:27.243 に答える
0

これがあなたがやりたいことだと思います:

outfile = file("outfile.txt", "w")
lines_to_check_for = [ line for line in file("list.txt", "r") ]
for line in file("testing.txt", "r"):
    if not line in lines_to_check_for:
        outfile.write(line)

これにより、すべての行が配列に読み込まlist.txtれ、その配列に対して各行がチェックされtesting.txtます。その配列にないすべての行は に書き出されoutfile.txtます。

新しい質問に基づいた更新された例を次に示します。

newusers = file("newusers.txt", "w")
existing_users = [ line for line in file("users.txt", "r") ]
for line in file("testing.txt", "r"):
    # grab each comma-separated user, take the portion left of the @, if any
    new_users = [ entry.split["@"](0) for entry in line.split(",") ]
    for user in new_users:
        if not user in existing_users:
            newusers.write(user)
于 2012-10-15T19:02:20.067 に答える