亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

從文件中讀取值,自動創建變量來存儲它們

從文件中讀取值,自動創建變量來存儲它們

PIPIONE 2024-01-24 15:51:58
我有一個文本文件,params.txt其格式如下(忽略顏色格式,這是一個純文本文件,而不是 python 代碼):Lx = 512 Ly = 512g = 400================ Dissipation =====================nupower = 8 nu = 0alphapower = -0 alpha = 0================ Timestepping =========================SOMEFLAG = 1SOMEOTHERFLAG = 4dt = 2e-05[...and so on]即變量按其值分隔=,值是整數、浮點數和科學記數法的混合,有時一行上有兩個變量/值對,由一個空格分隔,并且有以下形式的標題================ HeadingToBeDiscarded ================在 python 中,如何讀取文本文件,并在 python 腳本中自動創建相同的變量并為它們分配與文件中相同的值?文件的格式每次都是相同的,因此可以進行暴力破解,但我確信有一個優雅的 python/regex 解決方案(但我是 python 新手,幾乎沒有進行過正則表達式?。?
查看完整描述

5 回答

?
侃侃無極

TA貢獻2051條經驗 獲得超10個贊

現在,如果您想(硬編碼?).txt文件中的數據到.py文件,您應該使用如下內容:


temp_list = []

with open("params.txt") as file:

    while True:

        line = file.readline()

        line = line.strip()

        value = line.split(' ')

        for i, word in enumerate(value):

            if word == '=':

                var = f'{value[i-1]} = {value[i+1]}'

                temp_list.append(var)

        if not line:

            break


with open('sets.py', 'w') as f:

    f.write('\n'.join(temp_list))

這將創建一個名為sets.py(您可以更改名稱)的新 python 文件并將所有值從文本文件存儲到 .py 文件?,F在,要使用這些值,請首先確保它們sets.py與主 python scipt 位于同一目錄中,然后from sets import *現在只需鍵入其名稱即可訪問任何這些值,它將被識別。試試看


查看完整回答
反對 回復 2024-01-24
?
呼喚遠方

TA貢獻1856條經驗 獲得超11個贊

我認為這應該可以用字典來實現。


像這樣的東西:


def getVariables():

with open("filename.txt",'r') as file:

    variables = {}

    while True:

        line = file.readline()

        line = line.strip()

        value = line.split(' ')

        for i, word in enumerate(value):

            if word == '=':

                variables[str(value[i-1])] = value[i+1]

        if not line:

            break

return variables

這會留下字典形式的輸出,其中鍵為:變量名稱,值為:變量本身。像這樣:


變量= {'Lx':'512','Ly':'512','nupower':'8','nu':'0'}


我不知道如何實現某種檢測它是 int 還是 float 的方法......


查看完整回答
反對 回復 2024-01-24
?
守候你守候我

TA貢獻1802條經驗 獲得超10個贊

改進了答案之一的腳本,可以檢測 int、float 和 str


def getVariables():

    with open("params.txt") as file:

        variables = {}

        while True:

            line = file.readline()

            line = line.strip()

            value = line.split(' ')

            for i, word in enumerate(value):

                if word == '=':

                    try:

                        variables[str(value[i-1])] = int(value[i+1])

                    except ValueError:

                        try:

                            variables[str(value[i-1])] = float(value[i+1])

                        except ValueError:

                            variables[str(value[i-1])] = (value[i+1])

            if not line:

                break

    return variables


查看完整回答
反對 回復 2024-01-24
?
牧羊人nacy

TA貢獻1862條經驗 獲得超7個贊

對于未來的讀者,另一種解決方案是使用代碼exec()運行適當切碎的字符串params.txt,以給定的值分配變量:


with open('params.txt', 'r') as infile:

for line in infile:

? ? splitline = line.strip().split(' ')

? ? for i, word in enumerate(splitline):

? ? ? ? if word == '=':

? ? ? ? ? ? # DANGER! Don't use this unless you completely trust the content of params.txt!

? ? ? ? ? ? exec(splitline[i-1] + splitline[i] + splitline[i+1])

這避免了按照 Matiiss 的解決方案解析文件、創建字典、打印 .py 文件,然后讀取 .py 文件。


查看完整回答
反對 回復 2024-01-24
?
慕田峪7331174

TA貢獻1828條經驗 獲得超13個贊

我的建議是,你可能不應該以這種方式存儲它。

如果甚至不考慮人類閱讀,請使用 pickle 來存儲 python 對象。

如果它應該是人類可讀/可編輯的,我會建議 csv 文件或類似的文件


查看完整回答
反對 回復 2024-01-24
  • 5 回答
  • 0 關注
  • 262 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號