Python在如何编写读取文件的代码以更新查找的动态字典时遇到了混乱

2024-04-27 09:00:01 发布

您现在位置:Python中文网/ 问答频道 /正文

我是python中的一个彻头彻尾的noob:如何重构下面的代码,使dictionaryd实际上是文件系统中的一个文件,如果在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文件读取器。你能把它包括在解决方案中吗。谢谢!!!你知道吗


Tags: columns文件程序comfor电子邮件地址line
3条回答

我对解决方案进行了编码。你知道吗

#!/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)

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

看看python^{}模块。它是一个字典类型的对象,持久存在于文件系统中(在后台使用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'

相关问题 更多 >