【问题标题】:Read text file to create list and then convert to dictionary python读取文本文件以创建列表,然后转换为字典 python
【发布时间】:2021-10-27 18:24:11
【问题描述】:

我正在阅读文本文件使用

source= open(curr_file,"r")
lines= source.readlines()

这会将我的文本文件中的每一行转换为一个列表,但我的列表中的某些项目是用双引号创建的,而有些是用单引号创建的,如下所示。

['[INFO] Name: Xxxx, section: yyyy, time: 21.2, status: 0\n', "proof:proof1,table: db.table_name,columns:['column_1'],count:10,status:SUCCESS\n",'run time: 30 seconds\n']

列表中的第一项是用单引号创建的,而第二项是用双引号创建的。

当试图将上述内容转换为字典时

new_line= dict(x.split(":"),1) for x in line.split(","))

它给了我一个值错误

Value error: dictionary update sequence element has length 1; 2 is required

上述错误是因为它将双引号下的整个字符串视为单个值,并且无法将其转换为字典。

有没有办法将其转换为单引号而不是双引号。我尝试使用替换,剥离。但没有任何帮助。

预期输出: { 姓名:XXX, 部分:yyyy, 时间:21.2, 证明:证明1 表:db.table_name 状态:成功 }

【问题讨论】:

  • 您的预期输出是什么?
  • 预期输出是带有键值对的字典。编辑问题以添加预期输出
  • 不在 cmets 中,您可以 edit 您的问题并将其包含在其中
  • 你打错了new_line= dict(...这一行
  • 我已经更新了有问题的预期输出

标签: python dictionary parsing


【解决方案1】:

引号与错误无关。每行的外部引号不是 str 对象的一部分。他们只打印给你知道它是一个str。单引号切换为双引号,因为内容中有单引号,那么单引号不能用来分隔str。但同样,这只是打印内容的变化,而不是存储在内存中的内容。

尝试分步执行并打印调试程序所获得的中间对象。

for x in line: #prints nicer than print(line)
    print(x)

arg = [x.split(":",1) for x in line.split(",")]

for x in arg:    
    print(x)

new_line = dict(arg)

你应该得到包含两个元素的打印元组

【讨论】:

  • 我对其进行了故障排除并发现了问题。有些行的列=['column_1','column_2','column_3']。由于我用逗号分隔 column_2 和 column_3 只剩下一个参数。有什么办法可以处理吗?
  • 我更正了它,它现在可以工作了
【解决方案2】:

为了将你的一行(str)转换为dict,你可以使用字典理解:

new_line = dict(x.split(":",1) for x in line.split()

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-10-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-12-16
    • 2023-03-15
    • 2017-12-03
    相关资源
    最近更新 更多