継続時間、開始時間、その他の種類のフィールドとともに多くのタスクが保存されている mysql データベースがあります。
構造は多かれ少なかれ次のようになります。
taskId | taskName | startTime | duration | server...
私にとって本当に重要なことは、タスクを取得し、すべてのタスクのすべての期間を taskName で始まるすべてのタスクの異なる列に配置し、最後の行にその期間の平均、または平均の式を格納することです。確かに何が良いでしょう。
私はスクリプトの新人なので、Python で csv.readers を処理することに行き詰まっています。私のアイデアは、タスクごとに異なるクエリを作成し、それらを列に書き込むことでした。次に、csv を読み取り、新しいクエリを作成して、新しいデータを追加します。それが最善の方法だとは思いませんが、他にどうすればよいかわかりません。
私は私が持っているものをあなたに与えますが、新しいより良い方法を自由に提供してください:) :
fp = open ("priors.csv","w") file = csv.writer(fp)
cur = con.cursor()
cur.execute("SELECT duration FROM table WHERE jobname = 'one_task'")
rows=cur.fetchall()
file.writerow('one_task')
file.writerows(rows)
fp.close()
######################################################################################
cur.execute("SELECT duration FROM table WHERE jobname = 'different_task ")
rows_to_write=cur.fetchall()
fprd = open ("priors.csv","rb")
file_rd = csv.reader(fprd)
file_rd_ls = []
for row in file_rd:
print row
file_rd_ls.append(row)
fprd.close()
fp = open ("priors.csv","w")
file_wr = csv.writer(fp)
count = 1
r_t_w_len = len(rows_to_write)
fl_rd_len = len(file_rd_ls)
result_list = list(rows_to_write)
dumm_string = ""
if r_t_w_len > fl_rd_len:
for i in range(fl_rd_len):
dumm_string = row + ',' + str(rows_to_write[count])
result_list.insert(count, dumm_string)
count+=1
while count <= (r_t_w_len + 1):
dumm_string = '""' + ',' + str(rows_to_write[count])
result_list.insert(count, dumm_string)
else:
for i in range(fl_rd_len):
if count <= (r_t_w_len + 1):
dumm_string = row + ',' + str(rows_to_write[count])
result_list.insert(count, dumm_string)
count+=1
else:
result_list.insert(count, row)
rows_to_write = tuple(result_list)
file_rd.writerows()
fp.close()
ご覧のとおり、タスクの名前は番号付けされていないため、ループを作成してそれらを実行することはできません。最初の 2 つのタスクから始めていますが、100 以上の異なるタスクがあります。
PS: 私はリストの cvs を正しく読んでいないことを知っています。私は今どこにいますか?
PS2: データベースを適切に読み取ることができないため、平均計算については攻撃しませんでした。