将特定信息从文件读入词典

2024-10-06 12:06:13 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个文本文件,里面有关于月球大气成分的数据。看起来是这样的:

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}。我确信有一种方法可以通过循环对每个键和值执行此操作,但我不知道如何执行


Tags: 数据readdatalinefilenameinfilefile成分
3条回答

你可以试试下面的方法

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'}

您可以使用下一个正则表达式^{}来求解它

代码:

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'
}

用你写这篇文章的方式,你可以把每一个单词列成一个列表,然后循环浏览所有的单词。它看起来是这样的:

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")

相关问题 更多 >