Penanganan File Python: Baca, Tulis, CSV, JSON dan pathlib Dengan Contoh

  1. Beranda
  2. Blog
  3. Pengembangan Perangkat Lunak

Pengembangan Perangkat Lunak

Penanganan File Python: Baca, Tulis, CSV, JSON dan pathlib Dengan Contoh

Hampir setiap skrip nyata membaca atau menulis file. Pelajari cara aman untuk membuka file, memilih mode yang tepat, menangani CSV dan JSON, bekerja dengan jalur menggunakan pathlib, dan menghindari kesalahan yang menghapus data Anda.

9 menit baca
Penanganan file Python: baca, tulis, CSV, JSON dan pathlib dengan contoh

Poin penting

  • Selalu buka file dengan blok with, sehingga ditutup secara otomatis.
  • Mode "w" menghapus file yang ada. Gunakan "a" untuk menambahkan satu, atau "x" untuk menolak penimpaan.
  • Ulangi objek file untuk membaca file besar tanpa memuat semuanya ke dalam memori.
  • Lewati encoding="utf-8" secara eksplisit, dan pilih pathlib untuk membangun jalur.

Log, laporan, konfigurasi, ekspor: cepat atau lambat, setiap skrip menyentuh sistem file. Penanganan file Python mudah untuk memulai, tetapi beberapa detail menentukan apakah kode Anda dapat diandalkan atau secara diam-diam menghancurkan data.

Panduan ini mencakup file teks, CSV, JSON, data biner, dan jalur, dengan fokus pada kebiasaan aman. Kami menjalankan contoh ini di Python 3.13 dalam folder sementara, dan output yang ditampilkan berasal dari proses tersebut.

Buka file dengan open() dan dengan

Fungsi open() bawaan mengembalikan objek file. Gunakan di dalam blok with:

with open("notes.txt", "w", encoding="utf-8") as file:
    file.write("first line\n")
    file.write("second line\n")

print(file.closed)

# True

Ketika blok berakhir, Python menutup file, meskipun terjadi kesalahan di dalamnya. Tanpa with, Anda harus memanggil close() sendiri, dan pengecualian dapat melewati baris itu. Menggunakan file setelah ditutup menimbulkan kesalahan:

file.read()

# ValueError: I/O operation on closed file.

Mode berkas

Argumen kedua pada open() mengatakan apa yang Anda rencanakan:

Modus Artinya Jika file tersebut ada Jika tidak
r Baca (standar) Membukanya Kesalahan
w Menulis Hapus dulu Menciptakannya
sebuah Tambahkan Menambah akhir Menciptakannya
x Ciptaan eksklusif Kesalahan Menciptakannya
r+ Membaca dan menulis Membukanya Kesalahan

Tambahkan b untuk data biner, seperti pada "rb" atau "wb". Teks adalah defaultnya, dan juga dapat ditulis secara eksplisit sebagai t.

Tulis dan lampirkan

write() tidak menambahkan jeda baris, jadi sertakan \n diri Anda sendiri. Menambahkan mempertahankan apa yang sudah ada:

with open("notes.txt", "a", encoding="utf-8") as file:
    file.write("third line\n")

Bandingkan dengan mode "w", yang menggantikan tiga baris kita dengan satu, tanpa peringatan sama sekali:

with open("notes.txt", "w", encoding="utf-8") as file:
    file.write("replaced\n")

# notes.txt now contains only: replaced

Jika Anda tidak boleh menimpa sesuatu, gunakan "x". Itu memunculkan FileExistsError dalam pengujian kami, karena notes.txt sudah ada.

Membaca file

Ada beberapa cara untuk membaca, dan pilihan yang tepat bergantung pada ukuran file:

Pendekatan Kembali Terbaik untuk
file.read() Satu string dengan segalanya File kecil
file.readline() Baris berikutnya Membaca header
file.readlines() Daftar garis File kecil yang Anda perlukan sebagai daftar
untuk baris dalam file Satu baris pada satu waktu Ukuran apa pun, terutama file besar
with open("notes.txt", encoding="utf-8") as file:
    print(repr(file.read()))

# 'first line\nsecond line\n'

with open("notes.txt", encoding="utf-8") as file:
    for line in file:
        print(line.strip())

# first line
# second line
# third line

Perhatikan karakter \n yang disimpan dalam string mentah. strip() menghapusnya. Objek file juga mengingat posisinya, jadi pembacaan dilanjutkan dari bagian terakhirnya:

with open("notes.txt", encoding="utf-8") as file:
    print(file.readline().strip())
    print(file.readlines())

# first line
# ['second line\n', 'third line\n']

Mengulangi file adalah teknik utama untuk log dan ekspor besar. Ia membaca baris demi baris, sehingga file multi-gigabyte tidak harus muat di memori.

Menangani kesalahan file

File mungkin hilang, terkunci, atau tidak dapat dibaca, jadi rencanakan hal tersebut:

try:
    with open("missing.txt", encoding="utf-8") as file:
        data = file.read()
except FileNotFoundError as error:
    print(error)

# [Errno 2] No such file or directory: 'missing.txt'
Pengecualian Penyebab khas
FileNotFoundError Jalannya tidak ada
FileExistsError Mode x pada file yang ada
IzinKesalahan Tidak diizinkan, atau terkunci di Windows
IsADirectoryError Jalurnya adalah folder
UnicodeDecodeError Pengkodean yang salah digunakan

Coba buka file dan temukan kesalahannya, daripada memeriksa terlebih dahulu dengan exists(), karena file bisa hilang antara pemeriksaan dan pembukaan. Panduan kami untuk penanganan pengecualian Python mencakup pendekatan ini.

file CSV

Jangan pisahkan sendiri baris CSV dengan koma, karena nilai yang dikutip dapat berisi koma. Modul standar csv menangani aturan tersebut. DictWriter dan DictReader adalah opsi yang paling mudah dibaca:

import csv

with open("orders.csv", "w", newline="", encoding="utf-8") as file:
    writer = csv.DictWriter(file, fieldnames=["id", "customer", "total"])
    writer.writeheader()
    writer.writerow({"id": 1, "customer": "Asha", "total": 1200})
    writer.writerow({"id": 2, "customer": "Ben", "total": 300})

with open("orders.csv", newline="", encoding="utf-8") as file:
    rows = list(csv.DictReader(file))

print(rows[0])
print(sum(int(r["total"]) for r in rows))

# {'id': '1', 'customer': 'Asha', 'total': '1200'}
# 1500

Dua detail penting. Lewati newline="" saat membuka file CSV, seperti yang direkomendasikan dokumentasi, untuk mencegah baris kosong di Windows. Dan setiap nilai kembali sebagai string, bilangan genap, itulah sebabnya kami membutuhkan int() dalam jumlah tersebut. Untuk pekerjaan data yang berat, perpustakaan seperti pandas mungkin lebih cocok.

file JSON

JSON adalah format biasa untuk konfigurasi dan data API. Ini dipetakan dengan rapi ke kamus Python dan mencantumkan:

import json

config = {"debug": True, "retries": 3, "hosts": ["a", "b"]}

with open("config.json", "w", encoding="utf-8") as file:
    json.dump(config, file, indent=2)

with open("config.json", encoding="utf-8") as file:
    print(json.load(file)["retries"])

# 3

Ingat penamaannya: dump dan load berfungsi dengan file, sedangkan dumps dan loads berfungsi dengan string. Jenis seperti tanggal tidak dapat disimpan secara langsung, jadi Anda perlu mengonversinya menjadi string terlebih dahulu.

Bekerja dengan jalur menggunakan pathlib

Merekatkan jalur bersama-sama dengan string akan merusak sistem operasi. Modul pathlib standar menangani pemisah untuk Anda dan menawarkan pintasan praktis:

from pathlib import Path

path = Path("data") / "reports" / "summary.txt"
path.parent.mkdir(parents=True, exist_ok=True)
path.write_text("all good\n", encoding="utf-8")

print(path.read_text(encoding="utf-8").strip())   # all good
print(path.suffix, path.stem, path.exists())      # .txt summary True
print(sorted(p.name for p in Path(".").glob("*.csv")))
# ['orders.csv']
Tugas pathlib
Bergabunglah dengan jalur Jalur("a") / "b.txt"
Buat folder path.mkdir(orang tua=Benar, ada_ok=Benar)
Membaca atau menulis seluruh teks read_text(), write_text()
Temukan file glob("*.csv"), rglob("*.py")
Hapus file path.unlink()
Dapatkan folder skrip saat ini Path(__file__).parent

Yang terakhir ini mengatasi sakit kepala yang umum. Jalur relatif diselesaikan dari tempat Anda menjalankan skrip, bukan dari tempat skrip berada, sehingga membangun jalur dari Path(__file__).parent menghindari banyak kejutan “file tidak ditemukan”.

File biner

File gambar, PDF, dan ZIP bukan teks. Buka dengan b, dan Anda membaca dan menulis bytes, tanpa melibatkan pengkodean:

with open("pixel.bin", "wb") as file:
    file.write(bytes([255, 0, 128]))

with open("pixel.bin", "rb") as file:
    print(file.read())

# b'\xff\x00\x80'

Menulis lebih aman

Jika suatu program mogok di tengah proses penulisan file penting, Anda mungkin mendapatkan hasil yang rusak. Perbaikan yang umum adalah menulis ke file sementara terlebih dahulu, lalu menukarnya ke tempatnya:

temp = Path("settings.tmp")
temp.write_text("new", encoding="utf-8")
temp.replace("settings.txt")

print(Path("settings.txt").read_text(), temp.exists())

# new False

replace() menimpa tujuan. Pada sistem file yang sama, penggantian nama umumnya bersifat atomik, sehingga pembaca akan melihat file lama atau baru, bukan campuran setengah tertulis.

Kiat: Jangan pernah membuat jalur file langsung dari input pengguna tanpa memeriksanya. Nilai seperti ../../secrets.txt dapat menjangkau file di luar folder yang Anda inginkan. Hal ini dikenal sebagai kerentanan penjelajahan jalur.

Contoh praktis: meringkas log

Naskah pendek ini menyatukan beberapa ide. Ia membaca log satu baris pada satu waktu, jadi ukurannya tidak menjadi masalah, menghitung setiap level menggunakan Counter, dan menulis ringkasan ke file baru:

from collections import Counter

counts = Counter()
with open("app.log", encoding="utf-8") as file:
    for line in file:
        counts[line.split()[0]] += 1

with open("summary.txt", "w", encoding="utf-8") as out:
    for level, total in counts.most_common():
        out.write(f"{level}: {total}\n")

# summary.txt
# ERROR: 2
# INFO: 2
# WARN: 1

Log sampel kami memiliki lima baris. Baris kosong akan merusak line.split()[0], jadi skrip sebenarnya harus melewati baris kosong terlebih dahulu.

Kesalahan umum

  • Menggunakan "w" padahal yang Anda maksud adalah "a". Data Anda yang ada akan langsung hilang saat dibuka, meskipun Anda tidak pernah menulis apa pun.
  • Menghilangkan pengkodean. Defaultnya berbeda-beda tergantung sistem, sehingga skrip yang berfungsi di Linux bisa gagal di Windows dengan teks beraksen atau emoji.
  • Memanggil read() pada file berukuran besar. Hal ini dapat menghabiskan memori, jadi ulangi baris saja.
  • Lupa int() pada nilai CSV. "10" + "20" menghasilkan "1020".
  • Menghilangkan newline="" untuk CSV. Anda mungkin mendapatkan baris kosong yang tidak terduga di Windows.
  • Tidak menguji kode file. Gunakan perlengkapan tmp_path pytest sehingga pengujian tidak pernah menyentuh file sebenarnya. Lihat tutorial pytest kami.

Penutup

Beberapa kebiasaan mencakup hampir semuanya di sini: gunakan with, atur pengkodeannya, pikirkan dua kali tentang "w", dan biarkan csv, json dan pathlib mengerjakan bagian yang sulit. Untuk berlatih, tulis skrip kecil yang membaca CSV, berjumlah satu kolom dan menyimpan ringkasan JSON ke folder baru.

Pertanyaan yang sering diajukan

Bagaimana cara membaca file baris demi baris dengan Python?

Buka di blok with dan ulangi objek file. Ini membaca satu baris pada satu waktu, sehingga berfungsi dengan baik bahkan untuk file yang sangat besar.

Apa perbedaan antara w dan mode?

Mode w menghapus semua konten yang ada segera setelah file dibuka. Mode a menyimpan konten yang ada dan menambahkan data baru ke akhir file.

Mengapa saya harus menggunakan with untuk membuka file?

Pernyataan with menutup file secara otomatis ketika blok berakhir, bahkan jika terjadi kesalahan. Ini mencegah kebocoran dan membantu memastikan data ditulis.

Bagaimana cara memeriksa apakah ada file dengan Python?

Gunakan Path(“name.txt”).exists() dari pathlib. Jika Anda berencana untuk langsung membukanya, menangkap FileNotFoundError biasanya lebih dapat diandalkan daripada memeriksanya terlebih dahulu.

Mengapa CSV saya memiliki baris kosong di Windows?

Anda mungkin membuka file tanpa baris baru = “”. Modul csv mengelola akhiran baris itu sendiri, jadi teruskan argumen tersebut untuk menghindari baris kosong tambahan.

Teruslah belajar

Bekerja dengan Stack Quora

Butuh bantuan dengan pengujian, WordPress atau SEO?

Kami membantu tim mengirimkan perangkat lunak yang lebih baik dan mengembangkan situs mereka. Beritahu kami apa yang sedang Anda kerjakan dan kami akan menyarankan langkah selanjutnya yang jelas.

Teruslah membaca

Panduan lebih lanjut tentang pengujian, AI & pengembangan modern

Menikmati artikel ini? Pilih topik dan langsung masuk ke tutorial terbaru kami.

Kecerdasan buatan

Penjelasan Halusinasi AI: Mengapa Model Bahasa Memperbaiki Masalah dan Cara Menguranginya

Halusinasi AI menjelaskan: apa itu, mengapa model bahasa memproduksinya, tipe umum, cara menguranginya dengan landasan dan petunjuk, dan pemeriksaan…

Baca artikel →
DevOps

Penjelasan Variabel Lingkungan: File .env, Rahasia, dan Konfigurasi Dilakukan dengan Benar

Variabel lingkungan dijelaskan dengan contoh Python yang kami jalankan: membaca dan mengaturnya, mengapa setiap nilai berupa string, file .env, pewa…

Baca artikel →
Pengembangan perangkat lunak

Penjelasan Pembatasan Kecepatan API: Algoritma, Header, dan Penanganan 429 Kesalahan

Pembatasan laju API dijelaskan dengan simulasi yang kami jalankan: keranjang token, jendela tetap, jendela geser, respons 429, header batas laju, pe…

Baca artikel →
Otomatisasi pengujian

Mengejek dengan Python: unittest.mock, patch dan Kesalahan yang Membuat Tes Berbohong

Mengejek dengan Python dengan unittest.mock, menguji: Mock dan return_value, side_effect, menambal di mana nama digunakan, spesifikasi dan autospec,…

Baca artikel →
Pengujian perangkat lunak

Penjelasan Cakupan Kode: Cakupan Jalur vs Cabang dan Apa Arti 100% Sebenarnya

Cakupan kode dijelaskan dengan coverage.py yang sebenarnya dijalankan: cakupan garis, cabang dan kondisi, membaca laporan, mengapa cakupan 100% masi…

Baca artikel →
Basis data & SQL

DELETE vs TRUNCATE vs DROP dalam SQL: Perbedaan, Rollback dan Kapan Menggunakan Masing-Masing

DELETE vs TRUNCATE vs DROP dijelaskan dengan SQL yang diuji: apa yang dihapus, rollback, pemicu, reset identitas, kecepatan, dan perbedaan PostgreSQ…

Baca artikel →
Basis data & SQL

Penjelasan Tampilan SQL: Membuat, Menggunakan, dan Menghindari Kesalahan, Dengan Contoh

Tampilan SQL dijelaskan dengan kueri yang kami jalankan: membuat tampilan, hasil langsung, menyembunyikan kolom, kinerja, tampilan yang dapat diperb…

Baca artikel →
Pengembangan perangkat lunak

Antarmuka TypeScript vs Tipe: Perbedaan Nyata, Diuji Dengan Kompiler

Antarmuka TypeScript vs tipe, diperiksa dengan kompiler sebenarnya: apa yang bisa dilakukan keduanya, apa yang hanya bisa dilakukan satu orang, peng…

Baca artikel →
Pengembangan perangkat lunak

Penjelasan Python *args dan **kwargs: Fungsi Fleksibel Dengan Contoh Jelas

Python *args dan **kwargs dijelaskan dengan kode yang kami jalankan: pengepakan dan pembongkaran, urutan parameter, argumen hanya kata kunci dan pos…

Baca artikel →
Pengembangan perangkat lunak

Fungsi Python Lambda: Sintaks, Kegunaan Sebenarnya, dan Kapan Tidak Digunakan

Fungsi python lambda dijelaskan dengan kode yang kami jalankan: sintaksis, pengurutan dengan kunci, peta dan filter, penutupan, jebakan pengikatan a…

Baca artikel →
Kecerdasan buatan

Apa Itu Agen AI? Cara Kerjanya, Dengan Agent Loop Sederhana yang Dapat Anda Jalankan

Apa itu agen AI? Panduan sederhana tentang loop agen, alat, memori, dan pagar pembatas, dengan loop Python kecil yang kami jalankan, risiko nyata da…

Baca artikel →
DevOps

Pemantauan vs Observabilitas: Perbedaan Nyata, Dengan Log, Metrik, dan Jejak

Penjelasan pemantauan vs observabilitas: kegagalan yang diketahui dan tidak diketahui, log, metrik dan jejak, penelusuran insiden checkout, sinyal e…

Baca artikel →
DevOps

Volume Docker vs Bind Mounts: Pertahankan Data Kontainer dengan Cara yang Benar

Volume Docker vs pengikatan pengikat dijelaskan: mengapa data kontainer menghilang, volume yang diberi nama, pengikatan pengikatan, tmpfs, contoh Tu…

Baca artikel →
Otomatisasi pengujian

TDD vs BDD: Perbedaan Utama, Satu Fitur Dibangun dengan Dua Cara dan Kapan Menggunakan Masing-masing

TDD vs BDD dijelaskan dengan satu fitur diskon yang dibuat dengan dua cara: refactor merah-hijau dengan kode yang kami jalankan, skenario Mengingat-…

Baca artikel →
Pengujian perangkat lunak

User Acceptance Testing (UAT): Proses, Checklist dan Contoh Nyata

Pengujian penerimaan pengguna menjelaskan: siapa yang menjalankannya, perbedaannya dengan QA, proses tujuh langkah, templat kasus uji UAT, daftar pe…

Baca artikel →
Basis data & SQL

Penjelasan Nilai NULL SQL: IS NULL, COALESCE, NULLIF dan Jebakan yang Harus Dihindari

Nilai SQL NULL dijelaskan dengan kueri yang kami jalankan: logika tiga nilai, IS NULL, COALESCE, NULLIF, cara agregat, penggabungan, dan pengurutan …

Baca artikel →
Basis data & SQL

Pernyataan SQL CASE WHEN: Sintaks, Contoh Nyata dan Kesalahan Umum

SQL CASE KETIKA dijelaskan dengan kueri yang kami jalankan: formulir sederhana dan dicari, urutan kondisi, pivot dengan SUM, trik COUNT, pengurutan …

Baca artikel →
Pengembangan perangkat lunak

Apa itu JWT? Token Web JSON Dijelaskan Dengan Contoh Kerja

Apa itu JWT? JSON Web Tokens menjelaskan: tiga bagian, token yang dibuat dan dirusak dalam kode yang kami jalankan, sesi JWT vs, penyimpanan, token …

Baca artikel →
Pengembangan perangkat lunak

Penjelasan Loop Acara JavaScript: Call Stack, Microtasks, dan Timer Dengan Contoh

Perulangan peristiwa JavaScript dijelaskan dengan kode yang kami jalankan: tumpukan panggilan, antrian tugas dan tugas mikro, mengapa setTimeout 0 t…

Baca artikel →
Pengembangan perangkat lunak

Generator Python dan Penjelasan Hasil: Menghemat Memori Dengan Contoh Nyata

Generator dan hasil Python dijelaskan dengan kode yang kami jalankan: bagaimana mereka menjeda dan melanjutkan, mengukur penghematan memori, saluran…

Baca artikel →
Kecerdasan buatan

Apa itu Embedding? Kesamaan Vektor dan Kosinus Dijelaskan Secara Sederhana

Apa itu embeddings? Panduan bahasa sederhana tentang vektor, kesamaan kosinus, dan penelusuran semantik, dengan contoh kecil yang kami jalankan, pen…

Baca artikel →
DevOps

Penerapan Biru-Hijau vs Canary: Perbedaan, Kompromi, dan Cara Memilih

Penjelasan penerapan blue-green vs canary: cara kerja masing-masing, biaya, risiko dan rollback, pengelompokan pengguna stabil yang kami uji, migras…

Baca artikel →
Otomatisasi pengujian

Tes Tidak Stabil: Apa Penyebabnya dan Cara Memperbaikinya untuk Kebaikan

Pengujian yang tidak stabil dijelaskan dengan demo yang kami jalankan: penyebab utama, cara mengonfirmasi dan mendiagnosisnya, perbaikan waktu yang …

Baca artikel →
Pengujian perangkat lunak

Load Testing vs Stress Testing: Perbedaan, Metrik dan Contoh k6

Penjelasan pengujian beban vs pengujian stres: apa yang dibuktikan masing-masing, pengujian lonjakan dan rendam, metrik yang penting, mengapa rata-r…

Baca artikel →
Pengujian perangkat lunak

Kasus Uji vs Skenario Uji: Perbedaan Utama, Contoh, dan Kapan Menggunakan Masing-masing

Penjelasan kasus uji vs skenario pengujian: definisi yang jelas, tabel berdampingan, satu fitur pengaturan ulang kata sandi yang diambil dari skenar…

Baca artikel →
Basis data & SQL

Optimasi Kueri SQL: Baca Rencana Eksekusi dan Perbaiki Kueri Lambat, Dengan Pengaturan Waktu

Pengoptimalan kueri SQL diuji pada sejuta baris: membaca rencana eksekusi, menambahkan indeks yang tepat, memperbaiki filter yang tidak dapat disarg…

Baca artikel →
Basis data & SQL

SQL UNION vs UNION ALL: Perbedaan, Contoh dan Kinerja Diuji

SQL UNION vs UNION ALL dijelaskan dengan kueri yang kami jalankan: duplikat, aturan yang diikuti keduanya, bug data nyata, kinerja terukur, INTERSEC…

Baca artikel →
Pengembangan perangkat lunak

Tutorial API Pengambilan JavaScript: GET, POST, Penanganan Kesalahan, dan Batas Waktu

Tutorial JavaScript Fetch API diuji pada server lokal: GET dan POST, mengapa 404 tidak muncul, bantuan yang dapat digunakan kembali, string kueri, b…

Baca artikel →
Pengembangan perangkat lunak

Penanganan File Python: Baca, Tulis, CSV, JSON dan pathlib Dengan Contoh

Penanganan file Python dijelaskan dengan kode yang kami jalankan: mode terbuka, dengan, membaca file besar, CSV, JSON, pathlib, file biner, penulisa…

Baca artikel →
Pengembangan perangkat lunak

Git merge vs rebase: perbedaan, contoh, dan kapan memakai masing-masing

Git merge vs rebase dijelaskan dengan keluaran log nyata, tabel perbandingan, aturan emas rebase, dan alur kerja tim yang aman.

Baca artikel →
Pengembangan perangkat lunak

List Comprehension Python: Sintaks, Contoh, dan Kapan Harus Dihindari

List comprehension Python dijelaskan: sintaks, filter, if-else, perulangan bersarang, waktu yang diukur, dan kapan perulangan for biasa lebih baik.

Baca artikel →
Basis data & SQL

Penjelasan SQL JOIN dengan Contoh (Inner, Left, Right, Full)

Pahami SQL JOIN langkah demi langkah dengan tabel dan query contoh: INNER, LEFT, RIGHT, FULL, CROSS, dan SELF, plus kesalahan umum dan tips performa.

Baca artikel →