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

如何在python中将特殊格式导入为字典?,python,Python,我有以下格式的文本文件,单行 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保存的 有没有办法解决这个问题,或者我应该用另一种方式重新格式化文件 谢谢你的回答

我有以下格式的文本文件,单行

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=user和value=password

,因为在本例中变量f是一个文件对象而不是一个列表,所以首先要做的是从中获取行。您可以使用*方法进行此操作

此外,我想我应该使用带分号(;)参数的strip。这将为您提供“username:password”字符串列表,前提是您的整个文件如下所示

我想你会想出在那之后该做什么

编辑 *出于某种原因,我自动假设您使用Python2.7。在3.X版中,您可能希望查看“distutils.text_file”(distutils.text_file)类。

试试这个

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
  • 在Python中以字符串形式加载文件的文本,其中包含
    open()
    read()
  • split(;)
    应用于该字符串以创建类似于
    [用户名:密码,用户名1:password1,用户名2:password2]的列表
  • 对上面列表中的每一项应用
    split(“:”)
    来拆分这些对,进行听写理解
  • 字典理解在这里很有用

    一行从文本文件中提取所有信息。按要求。希望你的导师印象深刻。问问他这是怎么回事,看看他说了些什么。也许可以更新你的问题,包括他的回答


    如果您想让我解释,请随意评论,我将详细介绍。

    您可能遇到的错误:

    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 != ""]
    

    一般来说,我建议您一步一步地完成这项工作,并将其分配给中间变量。

    实际上,您不会基于分号或冒号拆分字符串。首先,您需要在中读取文件,然后在分号上拆分,然后通过在冒号上拆分将每个分号块拆分为键值对。您可以使用各种工具重新格式化文件,转换每个
    到换行符。但我怀疑这是不允许的。您应该阅读这行代码,并使用Python代码将其正确地拆分。您知道如何将
    “用户名:密码;用户名1:password1;用户名2:password2”
    拆分为一个由3个字符串组成的列表,按分号拆分吗?文件只有一行。@PM2Ring即使只有一行,
    对于文件中的行
    仍然是一个很好的方法。@Gigaflop,如果您愿意,尽管
    file.read()
    更简单。我在前面的评论中反对
    .readlines
    ,这在这里是毫无意义的。如果你发布一个完整的解决方案,OP将如何学习?@brunodesshuilliers。注意。感谢您突出显示.BTW,最好发布Python 3代码,除非OP标记了Python 2的问题,或者特别要求提供Python 2代码。Python2将在一年多一点的时间内达到它的正式寿命,不应该有人将其用于新代码。对Python不熟悉的人肯定应该学习Python 3。如果真的需要,他们可以稍后学习Python 2。
    pass
    是一个保留字。如果发布完整的解决方案,OP将如何学习?@brunodesshuilliers修复
    [element for element in x.split(";") if element != ""]