[英]How to correctly call variables from a txt file into my python code?
相關代碼如下運行:
model = Prism(x1, x2, y1, y2, z1, z2, {'density': ρ})
data = np.array([prism.potential(x, y, z, [model])
我必須在文件中輸入50,000個棱鏡。 通過簡單的測試,可以確定一種有效的格式如下:
model1 = Prism(x1, x2, y1, y2, z1, z2, {'density': ρ})
model2 = Prism(x1, x2, y1, y2, z1, z2, {'density': ρ})
model3 = Prism(x1, x2, y1, y2, z1, z2, {'density': ρ})
data = np.array([prism.potential(x, y, z, [model1, model2, model3])
我需要從中導入棱鏡的文件的格式如下:
x1 x2 y1 y2 z1 z2 ρ
它包含約50,000行上述數據。 我試圖弄清楚該怎么做,是在一個腳本中導入並運行所有50,000個棱鏡。 我知道不可能將model1 ... model50000寫入腳本,我只是希望周圍有一個不錯的方法?
提前致謝!
通常,如果遇到類似這樣的代碼,則使用帶數字結尾的類似變量:
a1 = 4
a2 = 2
a3 = 5
您可以將這些變量替換為可以立即構建的列表:
a = [4, 2, 5]
或逐步建立
a = []
a.append(4)
a.append(2)
a.append(5)
將此模式應用於您的問題,您會注意到您具有model1
, model2
等。 這就是我們需要清單的線索。 實際上, prism.potential
函數接受這樣的列表。
另外,我注意到您正在使用numpy,因此您可以訪問numpy.loadtxt
函數,該函數可以將文件讀取到數組中。
所以,
# Read the file into an array
filedata = np.loadtxt('filename')
# Build a list with all the Prisms
models = []
for x1, x2, y1, y2, z1, z2, ρ in filedata:
models.append(Prism(x1, x2, y1, y2, z1, z2, {'density': ρ}))
現在我們有了可以傳遞其他功能的模型列表。 您必須更明確地說明該部分的工作原理。
您可以遍歷文件中的每一行:
with open(fname) as f:
content = f.readlines()
for line in content:
(x1, x2, y1, y2, z1, z2, p) = line.split() # for space separated fields
# do something
它將以字符串的形式讀取字段,您可能需要將它們轉換為數字,因此, 根據此處的答案,您可以執行以下操作:
>>> a = "545.2222"
>>> float(a)
545.22220000000004
>>> int(float(a))
545
編輯:csv模塊可能對此有用,特別是如果您的某些或所有字段為數字並且任何字符串字段都用引號引起來時,因為它使您可以控制如何將字段解釋為類型。 將quoting = csv.QUOTE_NONNUMERIC傳遞給讀者,以告訴它所有未引用的列都是數字:
import csv
with open('data.txt') as csvfile:
reader = csv.reader(csvfile, delimiter=' ', quoting=csv.QUOTE_NONNUMERIC)
for row in reader:
# row is a list that contains your values
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.