Python 从由分号分隔的键值对文件生成字典
我正在以以下格式从文件导入一些数据:Python 从由分号分隔的键值对文件生成字典,python,Python,我正在以以下格式从文件导入一些数据: username:password;username1:password1;username2:password2; 我需要将其导入字典,并设置key=username和value=password等 到目前为止,我得到的是: with open('file.txt') as f: password_list = dict(x.strip(":").split(";", 1) for x in f) for user, password in
username:password;username1:password1;username2:password2;
我需要将其导入字典,并设置key=username
和value=password
等
到目前为止,我得到的是:
with open('file.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
。所以我需要再次拆分它们。有什么提示吗?您需要对拆分操作进行层次化:
s = "username:password;username1:password1;username2:password2"
d = dict(v.split(":") for v in s.split(";"))
print(d)
结果:
{'username2': 'password2', 'username': 'password', 'username1': 'password1'}
对于多行文件,只需再添加一个循环:
d = dict(v.split(":") for s in f for v in s.strip().split(";"))
值得补充的是:
- 如果密码包含
,则这种格式是短期的代码>或
。使用:
模块和正确的报价可以解决这个问题csv
- 忽略重复的用户名:由于字典键的唯一性,只考虑最后一个条目
construct是在不理解词典的情况下创建词典的旧方法,在这里特别有用,因为dict(v.split(“:”)
返回一个正好包含2个值(键/值)的split
列表
“;”
字符上拆分,对于每个检索到的值,可以在“:”
字符上拆分
假设输入定义为
input = "username:password;username1:password1;username2:password2;"
我们可以用这个来创建字典
dict([entry.split(":", 1) for entry in input.split(";") if entry])
解释
首先,我们对每个username:password
条目进行拆分
[entry for entry in input.split(";")]
然后检查是否没有空条目
[entry for entry in input.split(";") if entry]
然后我们在第一个:“
字符上拆分每个条目
[entry.split(":", 1) for entry in input.split(";") if entry]
最后我们把它放进字典里
dict([entry.split(":", 1) for entry in input.split(";") if entry])
添加另一个for循环?所以基本上你的文件只有一行?是的,先生。一行包含数千个用户名和密码值。试图让用户成为密钥,让密码成为值,这样我就可以对他们进行操作,比如查找重复项等,这些操作可以在这样的列表中工作,但不能在字典中读取文件非常好,如果我们使用
dict
而不是字典理解,我们可以使用一个表达式同时指定键和值,该表达式耦合键和值
,例如split(“:”)
不知道,ty@HannaL. 您可以先以str
的形式读取文件,也可以直接在f.read().split(“;”)
上读取文件,因为您说过该文件只有一行。对于文件中的行
给出了带有尾随新行的字符串,可能不想在最后一个密码中包含它们,因此在第二个代码段中使用s.strip()