【问题标题】:Python Split function for Values in Text File文本文件中值的 Python 拆分函数
【发布时间】:2020-05-12 06:12:31
【问题描述】:

我有一个输入文件Input.txt,在输入中我的内容为

Name1=Value1
Name2=Value2
Name3=Value3

现在从输入文件中,我可以根据新行拆分值。下一个任务是将名称和值对存储在 Dictionary 中。我尝试了以下方法,

with open("Input.txt", "r") as param_file:
    for line in param_file:
        str = line.split()
        d = dict(x.split("=") for x in str.split("\n"))

        for k,v in d.items():
            print(k, v)

但这给了我错误:AttributeError: 'list' object has no attribute 'split' 我知道列表没有拆分功能,这就是我得到这个的原因。实现这一点的正确方法是什么?

预期输出是:

Name1 Value1
Name2 Value2
Name3 Value3

【问题讨论】:

  • 好吧,str 在您的示例中是一个列表(split() 产生一个列表)。此外,调用内置函数等变量通常是不明智的。
  • 您正在使用.split()str = line.split() 行中创建一个列表。我认为您可能打算使用 .strip() 删除该行中的空格。该行应该类似于str = line.strip()。其余代码看起来不错。
  • 是的,这就是我收到该错误的原因。如何解决这个问题并用'='符号分割?

标签: python list dictionary split


【解决方案1】:

有几个问题出现了。首先是您创建的字典在每次迭代时都会被覆盖。这实质上意味着 dict d 将仅存储最后一行的值。一种选择是使用 .readlines() 读取整个文件并删除 for 循环。它应该看起来像:

with open("Input.txt", "r") as param_file:
    text = param_file.readlines()
    d = dict(x.strip().split("=") for x in text)
    for k,v in d.items():
        print(k, v)

【讨论】:

    【解决方案2】:

    您不必与\n 分开,因为每个line 都是文件中的一行。只需根据= 拆分行并获取第一个和第二个元素。

    with open("Input.txt", "r") as param_file:
        for line in param_file:
            strip_line = line.rstrip().split("=")
            d = {strip_line[0]: strip_line[1]}
    
            for k,v in d.items():
                print(k, v)
    

    【讨论】:

    • ValueError: dictionary update sequence element #0 has length 1; 2 is required
    【解决方案3】:

    我相信你真正想要的是这个:

    with open("Input.txt", "r") as param_file:
        d = dict(line.rstrip().split("=") for line in param_file )
    
    for k,v in d.items():
        print(k, v)
    

    【讨论】:

      【解决方案4】:

      这将产生一个字典列表:

      data = """
      Name1=Value1
      Name2=Value2
      Name3=Value3
      """
      
      result = [{key: value} 
                for line in data.split("\n") if line 
                for key, value in [line.rstrip().split("=")]]
      print(result)
      # [{'Name1': 'Value1'}, {'Name2': 'Value2'}, {'Name3': 'Value3'}]
      


      或者 - 我相信这更多的是你所追求的:
      result = {key: value
                for line in data.split("\n") if line
                for key, value in [line.split("=")]}
      # {'Name1': 'Value1', 'Name2': 'Value2', 'Name3': 'Value3'}
      

      【讨论】: