Cara terpendek mungkin adalah dengan menggunakan modul fileinput . Misalnya, berikut ini menambahkan nomor baris ke file, di tempat:
import fileinput
for line in fileinput.input("test.txt", inplace=True):
print('{} {}'.format(fileinput.filelineno(), line), end='') # for Python 3
# print "%d: %s" % (fileinput.filelineno(), line), # for Python 2
Yang terjadi di sini adalah:
- File asli dipindahkan ke file cadangan
- Output standar diarahkan ke file asli dalam loop
- Jadi setiap
print
pernyataan menulis kembali ke file asli
fileinput
memiliki lebih banyak bel dan peluit. Misalnya, ini dapat digunakan untuk beroperasi secara otomatis pada semua file di sys.args[1:]
, tanpa Anda harus mengulanginya secara eksplisit. Dimulai dengan Python 3.2 itu juga menyediakan manajer konteks yang nyaman untuk digunakan dalam with
pernyataan.
Walaupun fileinput
bagus untuk skrip yang dapat dibuang, saya akan berhati-hati menggunakannya dalam kode nyata karena memang itu tidak mudah dibaca atau tidak asing. Dalam kode (produksi) yang sebenarnya, sebaiknya hanya menghabiskan beberapa baris kode lagi untuk menjadikan prosesnya eksplisit dan dengan demikian membuat kode tersebut dapat dibaca.
Ada dua opsi:
- File tidak terlalu besar, dan Anda bisa membacanya sepenuhnya ke memori. Kemudian tutup file, buka kembali dalam mode penulisan dan tulis kembali konten yang dimodifikasi.
- File terlalu besar untuk disimpan dalam memori; Anda dapat memindahkannya ke file sementara dan membukanya, membacanya baris demi baris, menulis kembali ke file asli. Perhatikan bahwa ini membutuhkan penyimpanan dua kali lipat.
file
membayangi kelas yang telah ditentukan dengan nama yang sama.