我有關于月球大氣成分的資料的文本檔案。它看起來像這樣:
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}. 我確定有一種方法可以通過回圈對每個鍵和值執行此操作,但我不知道如何操作。
uj5u.com熱心網友回復:
你可以試試下面的
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'}
uj5u.com熱心網友回復:
使用你寫這篇文章的方式,你可以列出每個單詞并回圈遍歷所有單詞。它看起來像這樣:
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")
uj5u.com熱心網友回復:
您可以使用下一個正則運算式來解決它((?:[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'
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/322841.html
