下面的代碼應該從文件Dict_file
中查找第一列(關鍵字),並將另一個文件fr
的第一列替換爲從dict_file
找到的關鍵字的值。但它保留dict_file
作爲未來查找的更新字典。從文件填充字典的Python Noob問題。然後更新字典並寫回文件
每次運行代碼時,它都會從該dict_file文件初始化字典。如果它從另一個文件中找到新的電子郵件地址,它會將其添加到dict_file的底部。
根據我的理解,它應該可以正常工作,因爲如果找不到@符號,它會爲「[email protected]」的值分配looking_for。[email protected]應該被添加到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 == "[email protected]"
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:
[email protected] 223
[email protected] 224
[email protected] 225
[email protected] 226
[email protected] 227
這裏是FR文件得到第一列變成了ID從dict_file查找:
[email protected]|12|1|GDSP
[email protected]|13|7|GDFP
[email protected]|12|1|GDOP
[email protected]|132|1|GUIP
MONITOR|132|1|GUIP
|132|1|GUIP
00 |12|34|GUILIGAN
刺在黑暗中,因爲我沒有你的輸入文件看,但嘗試更換'ALIST = line.split()'和'ALIST = line.strip()分裂。 ()'和'columns = line.split('|')''列= line.strip()。split('|')'。 – zwol
Python允許你將第一部分寫成'with open(sys.argv [3],'r')作爲f:d.update(dict(line.split(),用於f中的line))':) –
I添加了dict_file以及上面的fr文件。請看一下..鏈接strip()方法不會改變程序結果。如果找到新的電子郵件地址,我只想在dict_file中存儲,只檢查是否包含「@」符號。如果沒有,它不應該被添加到dict_file – user836087