Saya membuat fungsi yang melakukan beberapa perhitungan, dan berhasil mendapatkan data yang benar dengan cara yang benar di file csv. Namun, kode saya sangat panjang dan membaca utas lain tentang topik ini, saya tidak menemukan cara mudah untuk mempersingkatnya. Kode saya adalah sebagai berikut:

def modelc(x,Mblood,Mliver,dt):
createFile = open('Time.csv', 'w')
createFile.write('t'+'\n')
createFile.close()

createFile = open('Blood.csv', 'w')
createFile.write('Mblood'+'\n')
createFile.close()

createFile = open('Liver.csv', 'w')
createFile.write('Mliver'+'\n')
createFile.close()

while x<24:
    Mblood = Mblood-Mblood*0.5*dt
    Mliver = Mliver+Mblood*0.5*dt
    x+=dt

    appendFile = open('Time.csv','a')
    appendFile.write('%f'%x+'\n')
    appendFile.close()

    appendFile = open('Blood.csv','a')
    appendFile.write('%f'%Mblood+'\n')
    appendFile.close()

    appendFile = open('Liver.csv','a')
    appendFile.write('%f'%Mliver+'\n')
    appendFile.close()

    csv_input = pandas.read_csv('Time.csv')
    csv_blood = pandas.read_csv('Blood.csv')
    csv_liver = pandas.read_csv('Liver.csv')
    csv_input['MassBlood'] = csv_blood['Mblood']
    csv_input['MassLiver'] = csv_liver['Mliver']
    csv_input.to_csv('Modeloutput.csv', index=False)

modelc(0,20,0,0.001)

File CSV kemudian terlihat seperti ini: masukkan deskripsi gambar di sini

Adakah yang punya cara sederhana untuk mencapai hasil yang sama dengan kode yang lebih pendek?

0
ElsRi 29 Mei 2020, 15:33

1 menjawab

Jawaban Terbaik

Pembukaan dan penutupan memakan waktu lama karena menggunakan memori HD. Alih-alih biarkan file terbuka (di memori sekunder), lakukan semua operasi dan tutup dan simpan di bagian paling akhir.

   def modelc(x,Mblood,Mliver,dt):
       createFile = open('Liver.csv', 'wt')
       createFile.write("t,MassBlood,MassLiver")
       for i in range(24):
          Mblood = Mblood-Mblood*0.5*dt
          Mliver = Mliver+Mblood*0.5*dt
          x+=dt
          createFile.write(str(x)+","+str(Mblood)+","+str(Mliver))
    createFile.close()
1
Gabriel Chaves Becchi 29 Mei 2020, 12:41