【问题标题】:Reading specific information from a file to a dictionary从文件中读取特定信息到字典
【发布时间】:2021-10-18 11:57:24
【问题描述】:

我有一个包含月球大气成分数据的文本文件。它看起来像这样:

Estimated Composition (night, particles per cubic cm): Helium 4 - 40,000 ; Neon 20 - 40,000 ; Hydrogen - 35,000 Argon 40 - 30,000 ; Neon 22 - 5,000 ; Argon 36 - 2,000 Methane - 1000 ; Ammonia - 1000 ; Carbon Dioxide - 1000

我应该编写一个函数来读取这样的文件并返回一个字典,其中元素的名称作为键,粒子密度作为值。到目前为止,我已经写了这个:

def read_file(filename):
    infile = open(filename, "r")
    for line in infile:
        words = line.split()
        if words[0] == "Helium":
             data = {words[0]:words[3]}
    print(data)
    return
read_file("atm_moon.txt")

返回{"Helium": "40,000}。我确信有一种方法可以通过循环对每个键和值执行此操作,但我不知道如何。

【问题讨论】:

  • 你需要更清楚文件的内容。请edit您的问题并将其中的行格式化为代码(而不是引号)。
  • 您的问题下有 3 个答案。您可以选择其中一个对您有更多帮助并accept它。

标签: python dictionary parsing


【解决方案1】:

你可以试试下面的

text = '''Estimated Composition (night, particles per cubic cm): Helium 4 - 40,000 ; Neon 20 - 40,000 ; Hydrogen - 35,000 ; Argon 40 - 30,000 ; Neon 22 - 5,000 ; Argon 36 - 2,000 ; Methane - 1000 ; Ammonia - 1000 ; Carbon Dioxide - 1000'''
parts = text[text.find(':') + 2:].split(' ; ')
data = {}
for p in parts:
  k,v = p.split(' - ')
  data[k] = v

print(data)

输出

{'Helium 4': '40,000', 'Neon 20': '40,000', 'Hydrogen': '35,000', 'Argon 40': '30,000', 'Neon 22': '5,000', 'Argon 36': '2,000', 'Methane': '1000', 'Ammonia': '1000', 'Carbon Dioxide': '1000'}

【讨论】:

  • 您的输入与问题输入不匹配
  • 我应该从文件中读取,但我认为我不能将文本复制并粘贴到变量中。有没有办法读取文件并将其保存为变量文本?我试过了,但不知道如何
  • @NicolaiAakerMenken,此代码不适用于您的输入。
【解决方案2】:

使用您编写此代码的方式,您可以列出每个单词并循环遍历所有单词。它看起来像这样:

def read_file(filename):
    infile = open(filename, "r")

    element_list = ["Helium", "Neon 20", "Hydrogen", "Argon 40", "Neon 22", "Argon 36", "Methane", "Ammonia", "Carbon Dioxide"]
    data = []
    for line in infile:
        words = line.split()
    for element in elementlist:
        if words[0] == element:
            data.append({words[0]:words[3]})
    print(data)
    return
read_file("atm_moon.txt")

【讨论】:

  • 您的输入与问题输入不匹配
【解决方案3】:

你可以使用下一个正则表达式((?:[A-Z][a-z]*\s*)*\d*)\s-\s([\d,]+)来解决它。

代码:

import re

with open(r"path/to/file") as f:
    res = dict(re.findall(r"((?:[A-Z][a-z]*\s*)*\d*)\s-\s([\d,]+)", f.read()))

结果:

{
    'Helium 4': '40,000',
    'Neon 20': '40,000',
    'Hydrogen': '35,000',
    'Argon 40': '30,000',
    'Neon 22': '5,000',
    'Argon 36': '2,000',
    'Methane': '1000',
    'Ammonia': '1000',
    'Carbon Dioxide': '1000'
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-03-20
    • 2022-11-19
    • 2015-09-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多