有人可以帮助我使用Python。我正在尝试针对负载和发电的不同值运行 168 牛顿拉夫森潮流研究。我在 Excel 电子表格中列出了这些值,并希望将这些值自动上传到 PSSE,运行模拟,然后将总线电压结果导出到另一个电子表格中,用于单独列中的所有 168 个模拟。
我有以下代码,但第 47 行显示错误: def runstudy(hour, values) SyntaxError: invalid syntax
我不知道如何纠正这个问题。
任何帮助将不胜感激
from __future__ import with_statement
from collections import defaultdict
import csv
import psspy
CSV_PQ_FILENAME = 'c:/Users\14088757\Desktop\EP401_Simulation Values_1.1.csv'
OUTPUT_CSV_FILENAME = 'c:/Users\14088757\Desktop\EP401_Simulation Values_1.1.csv'
STUDY_BASECASE = 'c:/Users\14088757\Desktop\EP401_PSSE_URA_20120716_6626.01.sav'
with open(CSV_PQ_FILENAME) as csvfile:
reader = csv.reader(csvfile)
headers = reader.next()
data = list(reader)
# now all the data from that sheet is in 'data'
# the columns are:
# load?, bus num, id, p or q, 6625, 6626, ....
hourly_data = defaultdict(list)
hour_headings = headers[4:]
for row in data:
isload, busnum, _id, porq = row[:4]
hour_values = row[4:]
# group all of the hourly data together in one list.
for hour, value in zip(hour_headings, hour_values):
hourly_data[hour].append(
(int(isload), int(busnum), _id, porq, float(value))
# hourly_data now looks like this:
# { '6626': [
# (1, 104, '1', 'P', 0.33243)
# ...
# ],
# '6627': [ ... ]
# '6628': [ ... ]
#}
# lets run some simulations.
def runstudy(hour, values)
# reload the base case.
psspy.case(STUDY_BASECASE)
# assume CSV has columns as described in the doc string
for isload, bus, _id, porq, value in values:
if isload:
if porq.lower() == 'p':
psspy.load_data_3(bus, _id, realar1=value)
elif porq.lower() == 'q':
psspy.load_data_3(bus, _id, realar2=value)
else:
psspy.machine_data_2(bus, _id, realar1=value)
# solve case after adding all loads / machines.
psspy.fnsl()
# return the bus voltages.
# now to write the new bus voltages to a file.
ierr, (voltages,) = psspy.abusreal(sid=-1, string=["PU"])
ierr, (buses,) = psspy.abusint(sid=-1, string=["NUMBER"])
return buses, voltages
# here we assume the buses will always be the same, no need
# keep storing them. I'll only store the voltages.
all_results = {}
for hour, values in hourly_data.items():
buses, voltages = runstudy(hour, values)
all_results[hour] = voltages
# now write all the results to a csv file
# CSV will have these columns:
# bus number, voltage (pu) 2265, 2267, ...
spreadsheet_results = [['buses'] + buses]
for hour, voltages in all_results.items():
spreadsheet_results.append([hour + ' pu'] + voltages)
# spreadsheet_results now looks like the one we want to write to the CSV.
with open(OUTPUT_CSV_FILENAME, 'wb') as output:
output.writerows(spreadsheet_results)