Ada beberapa cara untuk mempresentasikan keluaran suatu program; data dapat dicetak dalam bentuk yang dapat dibaca manusia, atau ditulis ke berkas untuk digunakan di masa mendatang. Bab ini akan membahas beberapa kemungkinan. Show 7.1. Pemformatan Keluaran yang Lebih Menarik¶Sejauh ini kami telah menemukan dua cara penulisan nilai: expression statements dan fungsi Seringkali Anda akan menginginkan lebih banyak kontrol atas pemformatan keluaran Anda daripada sekadar mencetak nilai yang dipisahkan ruang. Ada beberapa cara untuk memformat keluaran.
Ketika Anda
tidak membutuhkan keluaran yang menarik tetapi hanya ingin tampilan cepat dari beberapa variabel untuk keperluan debugging, Anda dapat mengonversi nilai apa pun menjadi string dengan fungsi Fungsi
Beberapa contoh: >>> s = 'Hello, world.' >>> str(s) 'Hello, world.' >>> repr(s) "'Hello, world.'" >>> str(1/7) '0.14285714285714285' >>> x = 10 * 3.25 >>> y = 200 * 200 >>> s = 'The value of x is ' + repr(x) + ', and y is ' + repr(y) + '...' >>> print(s) The value of x is 32.5, and y is 40000... >>> # The repr() of a string adds string quotes and backslashes: ... hello = 'hello, world\n' >>> hellos = repr(hello) >>> print(hellos) 'hello, world\n' >>> # The argument to repr() may be any Python object: ... repr((x, y, ('spam', 'eggs'))) "(32.5, 40000, ('spam', 'eggs'))" Modul 7.1.1. Literal String Terformat¶Formatted string literals (juga disebut f-string) memungkinkan Anda menyertakan nilai ekspresi Python di dalam string dengan mengawali string dengan Penentu format opsional dapat mengikuti ekspresi. Ini memungkinkan kontrol yang lebih besar atas bagaimana nilai diformat. Contoh berikut ini pembulatan pi ke tiga tempat setelah desimal: >>> import math >>> print(f'The value of pi is approximately {math.pi:.3f}.') The value of pi is approximately 3.142. Melewatkan bilangan bulat setelah >>> table = {'Sjoerd': 4127, 'Jack': 4098, 'Dcab': 7678} >>> for name, phone in table.items(): ... print(f'{name:10} ==> {phone:10d}') ... Sjoerd ==> 4127 Jack ==> 4098 Dcab ==> 7678 Pengubah lain dapat digunakan untuk mengonversi nilai sebelum diformat. >>> animals = 'eels' >>> print(f'My hovercraft is full of {animals}.') My hovercraft is full of eels. >>> print(f'My hovercraft is full of {animals!r}.') My hovercraft is full of 'eels'. Untuk referensi tentang spesifikasi format ini, lihat panduan referensi untuk formatpec. 7.1.2. Metode String format()¶Penggunaan dasar metode >>> print('We are the {} who say "{}!"'.format('knights', 'Ni')) We are the knights who say "Ni!" Tanda kurung
dan karakter di dalamnya (disebut fields format) diganti dengan objek yang diteruskan ke metode >>> print('{0} and {1}'.format('spam', 'eggs')) spam and eggs >>> print('{1} and {0}'.format('spam', 'eggs')) eggs and spam Jika argumen kata
kunci keyword argument digunakan dalam metode >>> print('This {food} is {adjective}.'.format( ... food='spam', adjective='absolutely horrible')) This spam is absolutely horrible. Argumen posisi dan kata kunci dapat dikombinasikan secara bergantian: >>> print('The story of {0}, {1}, and {other}.'.format('Bill', 'Manfred', other='Georg')) The story of Bill, Manfred, and Georg. Jika Anda memiliki string format yang sangat panjang yang tidak ingin Anda pisahkan, alangkah baiknya jika Anda bisa mereferensikan variabel yang akan
diformat berdasarkan nama alih-alih berdasarkan posisi. Ini dapat dilakukan hanya dengan melewatkan dict dan menggunakan tanda kurung siku >>> table = {'Sjoerd': 4127, 'Jack': 4098, 'Dcab': 8637678} >>> print('Jack: {0[Jack]:d}; Sjoerd: {0[Sjoerd]:d}; ' ... 'Dcab: {0[Dcab]:d}'.format(table)) Jack: 4098; Sjoerd: 4127; Dcab: 8637678 Ini juga bisa dilakukan dengan memberikan tabel sebagai argumen kata kunci keyword argument dengan notasi '**'. >>> table = {'Sjoerd': 4127, 'Jack': 4098, 'Dcab': 8637678} >>> print('Jack: {Jack:d}; Sjoerd: {Sjoerd:d}; Dcab: {Dcab:d}'.format(**table)) Jack: 4098; Sjoerd: 4127; Dcab: 8637678 Ini sangat berguna dalam kombinasi dengan fungsi bawaan
Sebagai contoh, baris-baris berikut menghasilkan kumpulan kolom yang disejajarkan rapi memberikan bilangan bulat dan kotak dan kubusnya: >>> for x in range(1, 11): ... print('{0:2d} {1:3d} {2:4d}'.format(x, x*x, x*x*x)) ... 1 1 1 2 4 8 3 9 27 4 16 64 5 25 125 6 36 216 7 49 343 8 64 512 9 81 729 10 100 1000 Untuk ikhtisar lengkap pemformatan string dengan
7.1.3. Pemformatan String Manual¶Inilah tabel kotak dan kubus yang sama, yang diformat secara manual: >>> for x in range(1, 11): ... print(repr(x).rjust(2), repr(x*x).rjust(3), end=' ') ... # Note use of 'end' on previous line ... print(repr(x*x*x).rjust(4)) ... 1 1 1 2 4 8 3 9 27 4 16 64 5 25 125 6 36 216 7 49 343 8 64 512 9 81 729 10 100 1000 (Perhatikan bahwa satu spasi di antara setiap kolom ditambahkan dengan cara Metode Ada metode lain, >>> '12'.zfill(5) '00012' >>> '-3.14'.zfill(7) '-003.14' >>> '3.14159265359'.zfill(5) '3.14159265359' 7.1.4. Pemformatan string lama¶Operator % (modulo) juga dapat digunakan untuk pemformatan string. Diberikan >>> import math >>> print('The value of pi is approximately %5.3f.' % math.pi) The value of pi is approximately 3.142. Informasi lebih lanjut dapat ditemukan di bagian printf-style String Formatting. 7.2. Membaca dan Menulis Berkas¶
>>> f = open('workfile', 'w') Argumen pertama adalah string yang berisi nama file. Argumen kedua adalah string lain yang berisi beberapa karakter yang menggambarkan cara berkas akan digunakan.
mode dapat Biasanya, file dibuka di text mode, yang berarti, Anda membaca dan menulis string
dari dan ke file, yang dikodekan dalam pengkodean tertentu. Jika pengkodean tidak ditentukan, standarnya adalah bergantung platform (lihat :func: open). Dalam mode teks, standar saat membaca adalah mengonversi akhir baris spesifik platform ( Ini adalah praktik yang baik untuk menggunakan kata kunci
>>> with open('workfile') as f: ... read_data = f.read() >>> # We can check that the file has been automatically closed. >>> f.closed True Jika anda tidak menggunakan kata kunci Peringatan Memanggil Setelah objek file ditutup, baik dengan pernyataan >>> f.close() >>> f.read() Traceback (most recent call last): File "<stdin>", line 1, in <module> ValueError: I/O operation on closed file. 7.2.1. Metode Objek Berkas¶Sisa contoh di bagian ini akan menganggap bahwa objek berkas bernama Untuk membaca konten file, panggil >>> f.read() 'This is the entire file.\n' >>> f.read() ''
>>> f.readline() 'This is the first line of the file.\n' >>> f.readline() 'Second line of the file\n' >>> f.readline() '' Untuk membaca baris dari file, Anda dapat mengulangi objek berkas. Ini hemat memori, cepat, dan mengarah ke kode sederhana >>> for line in f: ... print(line, end='') ... This is the first line of the file. Second line of the file Jika Anda ingin membaca semua baris file dalam daftar list, Anda juga dapat menggunakan
>>> f.write('This is a test\n') 15 Jenis objek lain perlu dikonversi -- baik menjadi string (dalam mode teks) atau objek byte (dalam mode biner) -- sebelum menulisnya: >>> value = ('the answer', 42) >>> s = str(value) # convert the tuple to string >>> f.write(s) 18
Untuk mengubah posisi objek file, gunakan >>> f = open('workfile', 'rb+') >>> f.write(b'0123456789abcdef') 16 >>> f.seek(5) # Go to the 6th byte in the file 5 >>> f.read(1) b'5' >>> f.seek(-3, 2) # Go to the 3rd byte before the end 13 >>> f.read(1) b'd' Dalam file teks (yang dibuka tanpa Objek file memiliki
beberapa metode tambahan, seperti 7.2.2. Menyimpan data terstruktur dengan json¶String dapat dengan mudah ditulis dan dibaca dari file. Angka membutuhkan sedikit usaha, karena metode Alih-alih membuat pengguna terus-menerus menulis dan men-debug kode untuk menyimpan
tipe data yang rumit ke berkas, Python memungkinkan Anda untuk menggunakan format pertukaran data populer yang disebut JSON (JavaScript Object Notation). Modul standar bernama Catatan Format JSON umumnya digunakan oleh aplikasi modern untuk memungkinkan pertukaran data. Banyak programmer sudah terbiasa dengannya, yang membuatnya menjadi pilihan yang baik untuk interoperabilitas. Jika Anda memiliki objek >>> import json >>> json.dumps([1, 'simple', 'list']) '[1, "simple", "list"]' Varian lain dari fungsi Untuk menerjemahkan decode objek lagi, jika Teknik serialisasi sederhana ini dapat menangani daftar
list dan dictionary, tetapi membuat serialisasi instance kelas yang berubah-ubah arbitrary di JSON membutuhkan sedikit usaha ekstra. Referensi untuk modul Lihat juga
Berlawanan dengan JSON, pickle adalah protokol yang memungkinkan serialisasi objek Python yang semena-mena arbitrarily kompleks. Dengan demikian, ini khusus untuk Python dan tidak dapat digunakan untuk berkomunikasi dengan aplikasi yang ditulis dalam bahasa lain. Ini juga tidak aman secara bawaan: deserializing pickle data yang berasal dari sumber yang tidak dipercaya dapat mengeksekusi kode semena-mena arbitrary, jika data dibuat oleh penyerang yang terampil. |