0

我在 python 中是一个完全的菜鸟:我将如何重构下面的代码,以便字典d实际上是文件系统上的一个文件,如果在 fr 中找到一个新的电子邮件地址,它会通过电子邮件和下一个增量 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

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 回答
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 回答