当前位置: 代码迷 >> python >> 如何在python中将特殊格式导入为字典?
  详细解决方案

如何在python中将特殊格式导入为字典?

热度:82   发布时间:2023-07-16 09:59:04.0

我的文本文件格式如下:

username:password;username1:password1;username2:password2;

等等

到目前为止,我尝试过的是

with open('list.txt') as f:
    d = dict(x.rstrip().split(None, 1) for x in f)

但是我收到一条错误消息,指出长度为1和2是必需的,这表明文件不是作为key:value的。

有什么办法可以解决此问题,还是应该以其他方式重新格式化文件?

感谢您的回答。

到目前为止,我得到的是:

    with open('tester.txt') as f:
    password_list = dict(x.strip(":").split(";", 1) for x in f)


for user, password in password_list.items():
    print(user + " - " + password)

结果显示为username:password-username1:password1

我需要的是拆分username:password,其中key =用户,value =密码

由于在这种情况下变量f是文件对象而不是列表,所以第一件事就是从中获取行。 您可以为此使用 *方法。

此外,我想我将带号与分号(“;”)参数一起使用。 如果您的整个文件看起来像这样,它将为您提供“用户名:密码”的字符串列表。

我想您会弄清楚该怎么办。

编辑*我自动假定您出于某种原因使用Python 2.7。 在3.X版中,您可能需要查看“ distutils.text_file”( )类。

  1. 使用open()read()作为字符串在Python中加载文件的文本
  2. split(;)应用于该字符串以创建一个列表,例如[username:password, username1:password1, username2:password2]
  3. 进行dict理解,将split(":")应用于上述列表的每个项目,以拆分这些对。
with open('list.txt', 'rt') as f:
    raw_data = f.readlines()[0]
list_data = raw_data.split(';')
user_dict = { x.split(':')[0]:x.split(':')[1] for x in list_data }
print(user_dict)

字典理解在这里很有用。

一线将所有信息拉出文本文件。 按照要求。 希望您的导师印象深刻。 问他如何运作,看看他怎么说。 也许更新您的问题以包括他的回答。

如果您想让我解释一下,请随时发表评论,我将进一步详细介绍。

您可能会得到的错误:

ValueError:字典更新序列元素#3的长度为1; 2个为必填项

是因为文本行分号结尾 然后将其分割为分号,得到一个包含一些对和一个空字符串的列表:

>>> "username:password;username1:password1;username2:password2;".split(";")
['username:password', 'username1:password1', 'username2:password2', '']

然后在冒号上分割空字符串将导致单个空字符串,而不是两个字符串。


要解决此问题,请过滤出空字符串。 这样做的一个例子是

[element for element in x.split(";") if element != ""]

通常,我建议您一次只做一步,并分配给中间变量。

尝试这个。

f = open('test.txt').read()    
data = f.split(";")    
d = {}    
for i in data:    
    if i:    
        value = i.split(":")    
        d.update({value[0]:value[1]})    

print d

这是一个简单(但很长)的答案。 您需要从文件中获取 ,然后将其与拆分后的项目拆分:

results = {}
with open('file.txt') as file:
    for line in file:
      #Only one line, but that's fine
          entries = line.split(';')
          for entry in entries:
              if entry != '':
                  #The last item in entries will be blank, due to how split works in this example
                  user, password = entry.split(':')
                  results[user] = password