以下のコードは、ファイルから最初の列 (キー) を検索し、別のファイルの最初の列をから見つかったキーの値にDict_file
置き換えることになっています。ただし、将来の検索のために更新された辞書として保持されます。fr
dict_file
dict_file
コードが実行されるたびに、その dict_file ファイルから辞書が初期化されます。別のファイルから新しい電子メール アドレスが見つかった場合は、それを dict_file の末尾に追加します。
私の理解によれば、@ 記号が見つからない場合は「Dummy@dummy.com」の値を looking_for に割り当てるため、正常に動作するはずです.. Dummy@dummy.com を dict_file の末尾に追加する必要があります。
しかし、何らかの理由で、dict_file の最後に他の新しい電子メールと共に新しい行と空白行が追加され続けています。dict_file の最後に空白と改行を書き込むことはできません。
なぜこうなった?以下のコードで何が問題なのか、私の脳は爆発しようとしています! どんな助けでも大歓迎です!
#!/usr/bin/python
import sys
d = {}
line_list=[]
alist=[]
f = open(sys.argv[3], 'r') # Map file
for line in f:
alist = line.split()
key = alist[0]
value = alist[1]
d[str(key)] = str(value)
alist=[]
f.close()
fr = open(sys.argv[1], 'r') # source file
fw = open(sys.argv[2]+"/masked_"+sys.argv[1], 'w') # target file
for line in fr:
columns = line.split("|")
looking_for = columns[0] # this is what we need to search
if looking_for in d:
# by default, iterating over a dictionary will return keys
if not looking_for.find("@"):
looking_for == "Dummy@dummy.com"
new_line = d[looking_for]+'|'+'|'.join(columns[1:])
line_list.append(new_line)
else:
new_line = d[looking_for]+'|'+'|'.join(columns[1:])
line_list.append(new_line)
else:
new_idx = str(len(d)+1)
d[looking_for] = new_idx
kv = open(sys.argv[3], 'a')
kv.write("\n"+looking_for+" "+new_idx)
kv.close()
new_line = d[looking_for]+'|'+'|'.join(columns[1:])
line_list.append(new_line)
fw.writelines(line_list)
dict_file は次のとおりです。
WHATEmail@SIMPLE.COM 223
SamHugan@CR.COM 224
SAMASHER@CATSTATIN.COM 225
FAKEEMAIL@SLOW.com 226
SUPERMANN@MYMY.COM 227
dict_file ルックアップから最初の列を id に変換する fr ファイルを次に示します。
WHATEmail@SIMPLE.COM|12|1|GDSP
FAKEEMAIL@SLOW.com|13|7|GDFP
MICKY@FAT.COM|12|1|GDOP
SUPERMANN@MYMY.COM|132|1|GUIP
MONITOR|132|1|GUIP
|132|1|GUIP
00 |12|34|GUILIGAN