IN1037 . CODE INITIATION

Sesi 13: Penanganan Berkas (File Handling)

Integrasi Data: Mempelajari cara program berkomunikasi dengan dunia luar dengan membaca data mentah (misalnya, dari sensor) dan menyimpan hasil komputasi yang valid.

I. Ulasan: Mode dan Praktik Terbaik File I/O

Dalam sains dan AI, data mentah sering kali datang dalam format berkas teks (seperti TXT atau CSV). File Handling adalah proses membuka, membaca, dan menulis data ke berkas. Ini adalah mata rantai antara NumPy/Matplotlib dan data aktual.

Mode Dasar Operasi Berkas:

Mode Deskripsi Risiko
'r' Read (Hanya membaca). Berkas harus sudah ada. FileNotFoundError
'w' Write (Menulis). **Menimpa** berkas jika sudah ada. Membuat berkas baru jika tidak ada. Kehilangan data lama.
'a' Append (Menambahkan). Menulis di akhir berkas, tidak menimpa. Menggandakan data jika tidak hati-hati.

Praktik Terbaik: Menggunakan with open()

Wajib menggunakan konstruksi with open(...) as f:. Ini memastikan bahwa berkas akan **ditutup secara otomatis** (f.close()) bahkan jika terjadi error. Menutup berkas secara manual sering terlewat dan dapat menyebabkan *resource leak* atau kerusakan data.

II. Contoh Manual: Parsing Data Eksperimen (CSV)

Asumsikan kita menerima data suhu dan tekanan yang dipisahkan koma (CSV) dari sensor.

2.1. Berkas Mentah (data_sensor.csv):

Suhu (C),Tekanan (kPa)
25.1,101.3
25.3,101.5
24.9,101.1

2.2. Langkah Parsing Logika:

Langkah 1: Baca berkas baris per baris.
Langkah 2: Lewati baris header pertama.
Langkah 3: Untuk setiap baris, gunakan strip() dan split(',') untuk memisahkan nilai.
Langkah 4: Konversi nilai dari string menjadi float sebelum disimpan ke List/Array.

III. Kode Praktik (Google Colab)

3.1. Kode Sederhana: Menulis dan Membaca Berkas TXT

Membuat berkas output sederhana untuk log simulasi.

In [1]: python
# Tulis (Write) data ke berkas
with open("log_simulasi.txt", "w") as file:
    file.write("Waktu: 0.0, Posisi: 10.5\n")
    file.write("Waktu: 1.0, Posisi: 8.9\n")
    print("Log berhasil ditulis!")

# Baca (Read) data dari berkas
print("\n--- Isi Berkas ---")
with open("log_simulasi.txt", "r") as file:
    for baris in file:
        print(baris.strip()) # strip() menghilangkan newline (\n)
Out [1]:
Log berhasil ditulis!

--- Isi Berkas ---
Waktu: 0.0, Posisi: 10.5
Waktu: 1.0, Posisi: 8.9

3.2. Kode Kompleks: Memuat dan Memproses CSV (Tanpa Pustaka CSV)

Membaca, mem-parsing, dan menganalisis data CSV menjadi array numerik (NumPy) untuk diolah lebih lanjut.

In [2]: python
import numpy as np

# Data CSV tiruan (simulasi berkas)
data_csv = [
    "ID,Nilai_A,Nilai_B", 
    "1,2.5,4.0", 
    "2,3.1,5.2", 
    "3,4.0,6.5"
]
# Simulasi penyimpanan berkas di Google Colab
with open('data_matriks.csv', 'w') as f:
    f.write('\n'.join(data_csv))

# 1. Membaca dan Memproses data
nilai_a = []
nilai_b = []

with open('data_matriks.csv', 'r') as file:
    is_header = True
    for line in file:
        if is_header:
            is_header = False
            continue
        
        # Pisahkan nilai dan konversi ke float
        try:
            parts = line.strip().split(',')
            nilai_a.append(float(parts[1]))
            nilai_b.append(float(parts[2]))
        except IndexError:
            # Lewati baris kosong atau rusak
            continue

# 2. Konversi ke NumPy Array
A_np = np.array(nilai_a)
B_np = np.array(nilai_b)

# 3. Analisis Lanjut (misalnya, menghitung Dot Product)
dot_prod = np.dot(A_np, B_np)
mean_A = np.mean(A_np)

print(f"Nilai A Array: {A_np}")
print(f"Dot Product A.B: {dot_prod:.2f}")
print(f"Rata-rata Nilai A: {mean_A:.2f}")
Out [2]:
Nilai A Array: [2.5 3.1 4. ]
Dot Product A.B: 44.52
Rata-rata Nilai A: 3.20

IV. Penugasan / PR Sesi 13: Log Eksperimen dan Analisis

Tugas Anda adalah membuat program yang:

  1. Membuat Data: Buat data simulasi kecepatan (v) dan momentum (p) sebanyak 10 data (gunakan fungsi for loop atau np.random).
  2. Menulis: Tuliskan data tersebut ke berkas bernama momentum.txt dengan format: vi, pi.
  3. Membaca & Analisis: Baca kembali berkas tersebut, konversi semua nilai ke float, dan hitung Rata-rata Momentum (menggunakan NumPy setelah data dimuat).