问题描述
我的文本文件格式如下:
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 =密码
1楼
由于在这种情况下变量f是文件对象而不是列表,所以第一件事就是从中获取行。 您可以为此使用 *方法。
此外,我想我将带号与分号(“;”)参数一起使用。 如果您的整个文件看起来像这样,它将为您提供“用户名:密码”的字符串列表。
我想您会弄清楚该怎么办。
编辑*我自动假定您出于某种原因使用Python 2.7。 在3.X版中,您可能需要查看“ distutils.text_file”( )类。
2楼
-
使用
open()
和read()
作为字符串在Python中加载文件的文本 -
将
split(;)
应用于该字符串以创建一个列表,例如[username:password, username1:password1, username2:password2]
-
进行dict理解,将
split(":")
应用于上述列表的每个项目,以拆分这些对。
3楼
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)
字典理解在这里很有用。
一线将所有信息拉出文本文件。 按照要求。 希望您的导师印象深刻。 问他如何运作,看看他怎么说。 也许更新您的问题以包括他的回答。
如果您想让我解释一下,请随时发表评论,我将进一步详细介绍。
4楼
您可能会得到的错误:
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 != ""]
通常,我建议您一次只做一步,并分配给中间变量。
5楼
尝试这个。
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
6楼
这是一个简单(但很长)的答案。 您需要从文件中获取行 ,然后将其与拆分后的项目拆分:
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