File System I/O
File system I/O adalah proses membaca data dari file dan menulis data ke file. Dalam praktikum, bagian ini sering digunakan untuk membaca data dari .txt, .csv, atau Excel, lalu menyimpan hasil pengolahan ke file baru.
I/O adalah singkatan dari Input dan Output. Input berarti program membaca data, sedangkan output berarti program menyimpan atau menampilkan hasil.
Path File
Sebelum membaca atau menulis file, kita perlu mengetahui lokasi file tersebut. Lokasi file disebut path.
nama_file = "data.txt"
print(nama_file)
Penjelasan: Jika hanya menulis
"data.txt", Python akan mencari file tersebut di folder tempat program dijalankan.
Untuk membuat path yang lebih rapi, kita bisa menggunakan pathlib.
from pathlib import Path
path_file = Path("data") / "nilai.txt"
print(path_file)
Penjelasan:
Path("data") / "nilai.txt"berarti filenilai.txtberada di dalam folderdata.
Kita juga bisa mengecek apakah file sudah tersedia.
from pathlib import Path
path_file = Path("data") / "nilai.txt"
print(path_file.exists())
Penjelasan:
.exists()menghasilkanTruejika file atau folder tersedia, danFalsejika tidak tersedia.
Membaca File TXT
File .txt bisa dibaca menggunakan fungsi bawaan open(). Cara yang aman adalah menggunakan with, karena file akan otomatis ditutup setelah selesai dibaca.
with open("data.txt", "r") as file:
isi = file.read()
print(isi)
Penjelasan: Mode
"r"berarti read atau membaca file.file.read()digunakan untuk membaca seluruh isi file.
Jika isi file terdiri dari beberapa baris, kita bisa membaca barisnya satu per satu.
with open("data.txt", "r") as file:
for baris in file:
print(baris)
Penjelasan: Perulangan
forakan membaca isi file baris demi baris.
Biasanya, setiap baris masih memiliki karakter baris baru. Untuk menghapusnya, gunakan .strip().
with open("data.txt", "r") as file:
for baris in file:
print(baris.strip())
Membaca Angka dari TXT
Jika file .txt berisi angka, data yang dibaca tetap berbentuk string. Agar bisa dihitung, data perlu diubah menjadi int atau float.
Misalnya file nilai.txt berisi:
80
90
75
85
File tersebut bisa dibaca seperti ini:
nilai = []
with open("nilai.txt", "r") as file:
for baris in file:
nilai.append(float(baris.strip()))
print(nilai)
print(sum(nilai) / len(nilai))
Penjelasan: Setiap baris dibersihkan menggunakan
.strip(), lalu diubah menjadifloatagar bisa digunakan dalam perhitungan.
Menulis File TXT
Untuk menulis file .txt, gunakan mode "w".
with open("hasil.txt", "w") as file:
file.write("Halo, ini file hasil dari Python")
Penjelasan: Mode
"w"berarti write atau menulis file. Jika file belum ada, Python akan membuat file baru. Jika file sudah ada, isi lama akan diganti.
Jika ingin menulis beberapa baris, tambahkan \n.
nama = "Budi"
nilai = 85
with open("hasil.txt", "w") as file:
file.write(f"Nama: {nama}\n")
file.write(f"Nilai: {nilai}\n")
Penjelasan:
\ndigunakan untuk membuat baris baru pada file teks.
Append ke File TXT
Jika ingin menambahkan isi tanpa menghapus isi lama, gunakan mode "a".
with open("log.txt", "a") as file:
file.write("Program selesai dijalankan\n")
Penjelasan: Mode
"a"berarti append. Data baru akan ditambahkan ke bagian akhir file.
Membuat Folder Output
Saat menyimpan hasil, biasanya kita membuat folder khusus seperti output atau hasil. Jika folder belum ada, kita bisa membuatnya menggunakan mkdir().
from pathlib import Path
folder_output = Path("output")
folder_output.mkdir(exist_ok=True)
with open(folder_output / "hasil.txt", "w") as file:
file.write("File ini disimpan di folder output")
Penjelasan:
exist_ok=Truemembuat Python tidak error jika folderoutputsudah ada.
Membaca File CSV
CSV adalah file teks yang datanya dipisahkan oleh koma. File CSV sering digunakan untuk menyimpan data tabel.
Misalnya file nilai.csv berisi:
nama,nilai
Budi,80
Ani,90
Citra,75
File tersebut bisa dibaca menggunakan module bawaan csv.
import csv
with open("nilai.csv", "r") as file:
reader = csv.reader(file)
for baris in reader:
print(baris)
Penjelasan:
csv.reader()membaca setiap baris sebagai list.
Jika file memiliki header, kita bisa menggunakan csv.DictReader().
import csv
with open("nilai.csv", "r") as file:
reader = csv.DictReader(file)
for baris in reader:
print(baris["nama"], baris["nilai"])
Penjelasan:
DictReader()membuat setiap baris bisa diakses menggunakan nama kolom.
Menulis File CSV
Untuk menulis file CSV, gunakan csv.writer().
import csv
data = [
["nama", "nilai"],
["Budi", 80],
["Ani", 90],
["Citra", 75],
]
with open("hasil.csv", "w", newline="") as file:
writer = csv.writer(file)
writer.writerows(data)
Penjelasan:
writer.writerows()menulis banyak baris sekaligus.newline=""digunakan agar file CSV tidak memiliki baris kosong tambahan.
Membaca Excel
Untuk membaca file Excel seperti .xlsx, kita bisa menggunakan library pandas. Library ini umum digunakan untuk membaca dan menulis data tabel.
Pada bab ini, pandas dipakai secukupnya untuk kebutuhan file Excel. Cara kerja DataFrame dan pengolahan tabel akan dibahas lebih lengkap pada bab Pandas.
Install library yang dibutuhkan:
pip install pandas openpyxl
Contoh membaca file Excel:
import pandas as pd
data = pd.read_excel("nilai.xlsx")
print(data)
Penjelasan:
pd.read_excel()membaca file Excel dan menyimpannya sebagai DataFrame. DataFrame adalah struktur data tabel yang disediakan oleh pandas.
Jika file Excel memiliki beberapa sheet, kita bisa memilih sheet tertentu.
import pandas as pd
data = pd.read_excel("nilai.xlsx", sheet_name="Sheet1")
print(data)
Penjelasan:
sheet_name="Sheet1"berarti pandas akan membaca sheet dengan namaSheet1.
Mengambil Kolom dari Excel
Setelah file Excel dibaca, kita bisa mengambil kolom tertentu berdasarkan nama kolom.
import pandas as pd
data = pd.read_excel("nilai.xlsx")
nama = data["nama"]
nilai = data["nilai"]
print(nama)
print(nilai)
Penjelasan:
data["nilai"]mengambil kolom bernamanilai.
Kita juga bisa menghitung rata-rata kolom.
rata_rata = data["nilai"].mean()
print(rata_rata)
Penjelasan:
.mean()digunakan untuk menghitung rata-rata pada kolom numerik.
Menulis File Excel
Data hasil pengolahan bisa disimpan kembali ke file Excel menggunakan .to_excel().
import pandas as pd
data = pd.DataFrame({
"nama": ["Budi", "Ani", "Citra"],
"nilai": [80, 90, 75],
})
data.to_excel("hasil.xlsx", index=False)
Penjelasan:
index=Falsedigunakan agar pandas tidak menambahkan kolom index ke file Excel.
Kita juga bisa menambahkan kolom baru sebelum menyimpan file.
import pandas as pd
data = pd.DataFrame({
"nama": ["Budi", "Ani", "Citra"],
"nilai": [80, 90, 75],
})
data["status"] = data["nilai"].apply(lambda nilai: "Lulus" if nilai >= 75 else "Belum lulus")
data.to_excel("hasil_nilai.xlsx", index=False)
Penjelasan: Kolom
statusdibuat berdasarkan nilai. Jika nilai lebih besar atau sama dengan 75, statusnya"Lulus".
Mengolah Kolom X1 sampai X5 dari Excel
Dalam soal pengolahan data, file Excel sering berisi kolom seperti x1, x2, x3, x4, dan x5. Kita bisa membaca kolom tersebut, lalu menghitung rata-rata dan range.
import pandas as pd
data = pd.read_excel("data_pengukuran.xlsx")
kolom_x = ["x1", "x2", "x3", "x4", "x5"]
data["xbar"] = data[kolom_x].mean(axis=1)
data["R"] = data[kolom_x].max(axis=1) - data[kolom_x].min(axis=1)
print(data)
Penjelasan:
axis=1berarti perhitungan dilakukan per baris. Kolomxbarberisi rata-rata darix1sampaix5, sedangkan kolomRberisi range setiap baris.
Contoh menambahkan BKA, BKB, dan status:
import pandas as pd
data = pd.read_excel("data_pengukuran.xlsx")
kolom_x = ["x1", "x2", "x3", "x4", "x5"]
data["xbar"] = data[kolom_x].mean(axis=1)
data["R"] = data[kolom_x].max(axis=1) - data[kolom_x].min(axis=1)
rata_rata_xbar = data["xbar"].mean()
rata_rata_r = data["R"].mean()
data["BKA"] = rata_rata_xbar + (0.577 * rata_rata_r)
data["BKB"] = rata_rata_xbar - (0.577 * rata_rata_r)
data["status"] = data.apply(
lambda baris: "Terkendali" if baris["BKB"] <= baris["xbar"] <= baris["BKA"] else "Tidak terkendali",
axis=1,
)
data.to_excel("hasil_pengukuran.xlsx", index=False)
Penjelasan: Data dibaca dari Excel, dihitung kolom tambahannya, lalu disimpan kembali ke file Excel baru.
Menulis Data ke TXT
Selain Excel, hasil pengolahan juga bisa disimpan ke file .txt.
import pandas as pd
data = pd.DataFrame({
"nama": ["Budi", "Ani", "Citra"],
"nilai": [80, 90, 75],
})
with open("laporan_nilai.txt", "w") as file:
for index, baris in data.iterrows():
file.write(f"{baris['nama']} - {baris['nilai']}\n")
Penjelasan:
.iterrows()digunakan untuk membaca DataFrame baris demi baris, lalu setiap baris ditulis ke file.txt.
Contoh Rekap Nilai Sederhana
Selain data pengukuran, File I/O juga bisa digunakan untuk membuat rekap nilai mahasiswa. Misalnya kita memiliki file nilai.txt berisi nilai berikut:
80
90
75
60
85
Kita bisa membaca file tersebut, menghitung rata-rata, lalu menyimpan ringkasannya.
nilai = []
with open("nilai.txt", "r") as file:
for baris in file:
nilai.append(float(baris.strip()))
rata_rata = sum(nilai) / len(nilai)
nilai_tertinggi = max(nilai)
nilai_terendah = min(nilai)
with open("rekap_nilai.txt", "w") as file:
file.write(f"Rata-rata: {rata_rata}\n")
file.write(f"Nilai tertinggi: {nilai_tertinggi}\n")
file.write(f"Nilai terendah: {nilai_terendah}\n")
Penjelasan: Contoh ini menunjukkan alur sederhana: baca file, olah data, lalu simpan hasil ke file baru.
Mode File
Saat menggunakan open(), ada beberapa mode file yang sering digunakan.
"r"untuk membaca file."w"untuk menulis file dan mengganti isi lama."a"untuk menambahkan isi ke akhir file."x"untuk membuat file baru dan error jika file sudah ada.
with open("contoh.txt", "x") as file:
file.write("File baru")
Penjelasan: Mode
"x"berguna ketika kita ingin memastikan file lama tidak tertimpa.
Error yang Sering Terjadi
Saat bekerja dengan file, ada beberapa error yang sering muncul.
FileNotFoundErrormuncul ketika file yang dibaca tidak ditemukan.PermissionErrormuncul ketika program tidak punya izin membaca atau menulis file.KeyErrormuncul ketika nama kolom yang diambil tidak ada.ValueErrorbisa muncul ketika isi file tidak sesuai dengan format yang diharapkan.
Contoh menangani file yang tidak ditemukan:
from pathlib import Path
path_file = Path("nilai.txt")
if path_file.exists():
with open(path_file, "r") as file:
print(file.read())
else:
print("File tidak ditemukan")
Penjelasan: Sebelum membaca file, program mengecek dulu apakah file tersedia.
Latihan Singkat
Coba buat program sederhana dengan ketentuan berikut:
- Buat file
nilai.txtyang berisi beberapa angka. - Baca file tersebut menggunakan
open(). - Hitung rata-rata dari angka yang ada di file.
- Simpan hasil rata-rata ke file
hasil.txt. - Buat file
nilai.csvberisi kolomnamadannilai. - Baca file CSV menggunakan
csv.DictReader(). - Simpan hasil pengolahan ke file CSV baru.
- Baca file Excel yang memiliki kolom
x1sampaix5. - Tambahkan kolom
xbar,R,BKA,BKB, danstatus. - Simpan hasil akhirnya ke file Excel baru.