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