2017-09-05 20 views
1

使用此链接上显示的堆栈溢出的答案:https://stackoverflow.com/a/4804039,我试图将文件内容读入字典中。有一个错误,我似乎无法修复。将文本文件中的登录数据读入字典错误

代码

def login(): 
        print("====Login====") 

        userinfo={} 
        with open("userinfo.txt","r") as f: 
           for line in f: 
             (key,val)=line.split() 
             userinfo[key]=val 
        print(userinfo) 

文件内容

{'user1': 'pass'} 
{'user2': 'foo'} 
{'user3': 'boo'} 

错误:

(key,val)=line.split() 
ValueError: not enough values to unpack (expected 2, got 0) 

我有一个问题,我非常感谢两倍的答案

  1. 什么是文件内容读最好的和最有效的方式,如图所示,进入字典,并指出,它已经被存储在字典格式。

  2. 有没有一种方法来写入字典,使“阅读”更容易?我在第一个地方写userinfo.txt文件代码如下所示

编写代码

with open("userinfo.txt","a",newline="")as fo: 
           writer=csv.writer(fo) 
           writer.writerow([{username:password}]) 

可以在任何的答案,请尝试以下

  1. 使用原始代码提供错误的解决方案

  2. 建议最好的方法来做同样的事情(最简单的教学目的)注意,我不希望使用pickle,json或非常基本的文件处理以外的任何东西(所以只能从文本文件或csv阅读器/写作工具)。例如,是否最好将文件内容读入列表中,然后将列表转换为字典?或者还有其他方法吗?

  3. 是否有一种使用csv阅读器或其他基本txt文件处理方式将字典写入文本文件的方法,以便可以在另一端更有效地将文件内容读入字典。

更新:

空白线去除,并且代码的工作,但产生错误的输出:

{"{"Vjr':": "'open123'}", "{'mvj':": "'mvv123'}"} 

我想我需要理解分裂和条命令以及如何在此上下文中使用它们以产生期望的结果(将内容读入字典用户信息)

回答

1

那么我们先从基础开始。错误消息:

ValueError: not enough values to unpack (expected 2, got 0) 

意味着一行是空的,所以你有一个空行在文件中?

+0

Thank you -yes。Blank line removed。and now following:{“{'benjr' :“:”'open123'}“,”{'marvj':“:”'marv123'}“} W虐待更新的问题包括这一点。我仍然是将文件内容写入/读入字典的最佳方式。我最初的想法是写作一个列表,并使用我给出的链接上显示的代码作为字典阅读。我确信虽然有更简单的方法...再次感谢您 – MissComputing

0

是的,还有其他选项可以将字典保存并将其还原,但首先您应该明白这一点,并且可能适合您。 :-) split()作用于从文件中读取的字符串,默认情况下会分割空间,所以这就是你所看到的。你可以格式化你的文本文件,如“用户名:通”来代替,然后使用拆分(“:”)。

文件内容

user1:pass 
user2:foo 
user3:boo 

代码

def login(): 
    print("====Login====") 

    userinfo={} 
    with open("userinfo.txt","r") as f: 
     for line in f: 
      (key,val)=line.split(':') 
      userinfo[key]=val.strip() 
     print(userinfo) 

if __name__ == '__main__': 
    login() 

这种简单的格式可能是最好的如果你想能够手动编辑文本文件,并且我希望尽可能简单; ;-)