我想總結一下使用文本字串進行 python 計算的輸入引數。我可以使用總結輸入引數,print()但我不知道如何將這些也保存為文本字串。
示例代碼
首先,定義輸入引數的掃描:
import numpy as np
gapsize = np.arange(0.5,0.8,0.1)
ringwidth = np.arange(1.25,5,0.75)
outputangle = [28.43]
現在定義一個函式來列印這些值的特定于引數的摘要
def printSCANvalues(parameter):
## Do cases for text descriptions
if parameter is ringwidth:
paramTEXT = "RW"
elif parameter is gapsize:
paramTEXT = "Gap"
elif parameter is outputangle:
paramTEXT = "Facet Angle"
if parameter is ringwidth or parameter is gapsize:
unit = 'um'
elif parameter is outputangle:
unit = 'deg.'
## only calculate the gradient for arrays with more than one value
if len(parameter) > 1:
step = round(1000*np.gradient(parameter)[0])/1000
elif len(parameter) == 1:
step = 0
stopVAL = round(1000*parameter[-1])/1000
print("")
print(paramTEXT, "Scan: qty =", len(parameter),", start = ", parameter[0],
unit, ", stop = ", stopVAL, unit, ", step = ", step, unit)
print(paramTEXT, "values: ", parameter, unit)
現在使用函式生成總結輸入引數掃描的文本:
print("")
print("====== Input Parameter Scan Values ======")
print("")
printSCANvalues(ringwidth)
printSCANvalues(gapsize)
printSCANvalues(outputangle)
輸出截圖:

問題
我還想將此輸出保存為文本字串,以便將其寫入文本檔案。有沒有辦法在print()執行之前保存每個引數型別的關聯字串,以便我以后可以使用它?
uj5u.com熱心網友回復:
作為一個非常普遍的規則,在這種情況下,您不應該讓函式進行列印。讓函式回傳一個字串,讓呼叫者決定如何處理這個字串。像這樣。您可以看到如何獲取結果并稍后將它們復制到檔案中。
def SCANvalues(parameter):
## Do cases for text descriptions
if parameter is ringwidth:
paramTEXT = "RW"
elif parameter is gapsize:
paramTEXT = "Gap"
elif parameter is outputangle:
paramTEXT = "Facet Angle"
if parameter is ringwidth or parameter is gapsize:
unit = 'um'
elif parameter is outputangle:
unit = 'deg.'
## only calculate the gradient for arrays with more than one value
step = 0
if len(parameter) > 1:
step = round(1000*np.gradient(parameter)[0])/1000
stopVAL = round(1000*parameter[-1])/1000
s = f"{paramTEXT} Scan: qty = {len(parameter)}, start = {parameter[0]}, stop = {stopVal} {unit}, step = {step} {unit}\n"
s = f"{paramTEXT} Values: {parameter} {unit}"
return s
print("")
print("====== Input Parameter Scan Values ======")
print("")
rw = SCANvalues(ringwidth)
gs = SCANvalues(gapsize)
oa = SCANvalues(outputangle)
print(rw)
print(gs)
print(oa)
uj5u.com熱心網友回復:
我想我是用@martineau 的提示和@Tim Roberts 的修改想出來的。
def SCANvalues(parameter):
## Do cases for text descriptions
if parameter is ringwidth:
paramTEXT = "RW"
elif parameter is gapsize:
paramTEXT = "Gap"
elif parameter is outputangle:
paramTEXT = "Facet Angle"
if parameter is ringwidth or parameter is gapsize:
unit = 'um'
elif parameter is outputangle:
unit = 'deg.'
## only calculate the gradient for arrays with more than one value
step = 0
if len(parameter) > 1:
step = round(1000*np.gradient(parameter)[0])/1000
stopVAL = round(1000*parameter[-1])/1000
s = f"{paramTEXT} Scan: qty = {len(parameter)}, start = {parameter[0]}, stop = {stopVAL} {unit}, step = {step} {unit}\n"
s = f"{paramTEXT} Values: {parameter} {unit}\n"
return s
列印到檔案的代碼
我沒有看到是否有列印到檔案以及控制臺的選項,所以我只包含了兩個實體
log = open('log.txt', 'w')
geos = [ringwidth, gapsize, outputangle]
def geoPRINT(geoPARAMS):
print("\n ====== Input Parameter Scan Values ======\n")
print("\n ====== Input Parameter Scan Values ======\n",file = log)
for i in range(len(geoPARAMS)):
print(SCANvalues(geoPARAMS[i]))
print(SCANvalues(geoPARAMS[i]),file = log)
geoPRINT(geos)
log.close()
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/403634.html
標籤:
