0

私はPythonの完全な初心者です。新しい電子メールアドレスがfrで見つかった場合、辞書dが実際に電子メールと次の増分int IDによって追加されるファイルシステム上のファイルになるように、以下のコードをリファクタリングするにはどうすればよいですか?

これはfrファイルのファイル構造です。

7@comp1.COM|4|11|GDSPV
7@comp1.COM|16|82|GDSPV
13@comp1.COM|16|82|GDSPV

以下は私のプログラムです..メールアドレスをIDでマスクします. 現在、d 辞書をハードコーディングしていることに注意してください。

   d= {
    '7@comp1.COM': '199',
    '8@comp4.COM': '200',
    '13@comp1.COM': '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()

また、このプログラムを介して複数のファイルを送信したいと考えています。frファイルリーダーにワイルドカードまたは何か(*)を使用して、何百ものそれら。それをソリューションに含めることは可能ですか。ありがとう!!!

4

3 に答える 3

1

Pythonshelveモジュールを見てください。これは、ファイルシステムに永続的な辞書タイプのオブジェクトです(内部でpickleを使用)。

import shelve

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

d.update({
    '7@comp1.COM': '199',
    '8@comp4.COM': '200',
    '13@comp1.COM': '205'
})

d.close()

d = shelve.open(filename)
print d
#{'8@comp4.COM': '200', '7@comp1.COM': '199', '13@comp1.COM': '205'}

d.keys()
#['8@comp4.COM', '13@comp1.COM', '7@comp1.COM']

d['13@comp1.COM']
#'205'
于 2012-11-28T00:08:27.503 に答える
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)
于 2012-11-27T23:41:41.787 に答える
0

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

ピクルス

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

グロブ

于 2012-11-27T20:48:29.393 に答える