2012-11-27 16 views
0

我是Python中的總noob:我如何重構下面的代碼,以便字典實際上是文件系統上的文件如果在fr中找到新的電子郵件地址,它會被電子郵件附加到下一個增量int ID中?Python - 如何爲閱讀文件編寫代碼以更新查找動態詞典的困惑

這是FR文件的文件結構:

[email protected]|4|11|GDSPV 
[email protected]|16|82|GDSPV 
[email protected]|16|82|GDSPV 

下面是我的程序..它掩蓋電子郵件地址的ID。 請注意,目前,我已經對d字典進行了硬編碼。

d= { 
    '[email protected]': '199', 
    '[email protected]': '200', 
    '[email protected]': '205' 
    } 

fr = open(sys.argv[1], 'r') 
fw = open("masked_"+sys.argv[1], 'w') 

cnt = 0 
i = 1 
line_list = [] 


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 
     new_line = d[looking_for]+'|'+'|'.join(columns[1:]) 
     line_list.append(new_line) 
fw.writelines(line_list) 

fr.close() 
fw.close() 

另外我想通過這個程序發送多個文件。其中數百人使用通配符或somthing(*)作爲fr文件閱讀器。你能否在解決方案中包含這一點?謝謝!!!

+1

你的問題是什麼? – dm03514

+0

我從哪裏出發?我將如何重構上面的代碼,以便d字典實際上是文件系統上的文件,如果新的電子郵件地址進入fr,它會被追加到文件系統中? – user836087

+1

您是否探索過'pickle'將字典保存到文件? – zaphod

回答

0

I would like to maintain and persist the dictionary d in a file.

pickle

Also I would like to send multiple files through this program.

glob

0

予譯碼的溶液。

#!/usr/bin/python 

d = {} 

line_list=[] 
fr = open(sys.argv[2], 'r') 
fw = open(sys.argv[3]+"/masked_"+sys.argv[1], 'w') 

with open(sys.argv[1], 'r+') as f: 
    for line in f: 
     (key, val) = line.split() 
     d[key] = val 

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 
     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], 'r+') 
     kv.write(looking_for+" "+new_idx) 
     kv.close() 
     new_line = d[looking_for]+'|'+'|'.join(columns[1:]) 
     line_list.append(new_line) 

fw.writelines(line_list) 
1

看看python shelve模塊。它是一個持久的文件系統的字典型對象(使用底層的pickle)。

import shelve 

filename = sys.argv[1] 
d = shelve.open(filename) 

d.update({ 
    '[email protected]': '199', 
    '[email protected]': '200', 
    '[email protected]': '205' 
}) 

d.close() 

d = shelve.open(filename) 
print d 
#{'[email protected]': '200', '[email protected]': '199', '[email protected]': '205'} 

d.keys() 
#['[email protected]', '[email protected]', '[email protected]'] 

d['[email protected]'] 
#'205'