Saya cukup baru untuk Python dan sekarang saya berjuang dengan memformat data saya dengan baik untuk hasil cetak.
Saya punya satu daftar yang digunakan untuk dua pos, dan sebuah matriks yang harus menjadi isi tabel. Seperti itu:
teams_list = ["Man Utd", "Man City", "T Hotspur"]
data = np.array([[1, 2, 1],
[0, 1, 0],
[2, 4, 2]])
Perhatikan bahwa nama judul tidak harus panjangnya sama. Entri data semuanya bilangan bulat.
Sekarang, saya ingin mewakili ini dalam format tabel, sesuatu seperti ini:
Man Utd Man City T Hotspur
Man Utd 1 0 0
Man City 1 1 0
T Hotspur 0 1 2
Saya punya firasat bahwa harus ada struktur data untuk ini, tetapi saya tidak dapat menemukannya. Saya telah mencoba menggunakan kamus dan memformat pencetakan, saya telah mencoba untuk-loop dengan lekukan dan saya telah mencoba mencetak sebagai string.
Saya yakin pasti ada cara yang sangat sederhana untuk melakukan ini, tetapi saya mungkin melewatkannya karena kurangnya pengalaman.
Jawaban:
Beberapa kode ad-hoc untuk Python 2.7:
Ini bergantung pada
str.format()
dan Spesifikasi Format Mini-Bahasa .sumber
Ada beberapa paket python yang ringan dan berguna untuk tujuan ini:
1. tabulasi : https://pypi.python.org/pypi/tabulate
tabulate memiliki banyak opsi untuk menentukan header dan format tabel.
2. PrettyTable : https://pypi.python.org/pypi/PrettyTable
PrettyTable memiliki opsi untuk membaca data dari csv, html, sql database. Anda juga dapat memilih subset data, mengurutkan tabel dan mengubah gaya tabel.
3. texttable : https://pypi.python.org/pypi/texttable
dengan texttable Anda dapat mengontrol perataan horizontal / vertikal, gaya perbatasan, dan tipe data.
4. termtables : https://github.com/nschloe/termtables
dengan texttable Anda dapat mengontrol perataan horizontal / vertikal, gaya perbatasan, dan tipe data.
Pilihan lain:
sumber
coalign
kata kunci penyelarasan kolom tidak didukung dalam rilis pypi resmi. "tableprint" - rata-rata, kompleks API, tidak cukup contoh penggunaan umum.sumber
pip install numpy
menggunakan roda biner sekarang di sebagian besar platform (tanpa kompilasi) . Jelas, opsi instalasi biner lainnya sudah tersedia bahkan sebelum itu.Python sebenarnya membuat ini sangat mudah.
Sesuatu seperti
akan memiliki output
% Dalam string pada dasarnya adalah karakter pelarian dan karakter yang mengikutinya memberi tahu python format apa yang harus dimiliki data. % Di luar dan setelah string memberi tahu python bahwa Anda bermaksud menggunakan string sebelumnya sebagai string format dan bahwa data berikut harus dimasukkan ke dalam format yang ditentukan.
Dalam hal ini saya menggunakan "% -12i" dua kali. Untuk memecah setiap bagian:
Dari dokumen: https://docs.python.org/2/library/stdtypes.html#string-formatting
sumber
print('%-20.2f' % position['deg'], '%-17.2f' % position['v2'])
mana.2
menentukan presisi floatf
Memperbarui jawaban Sven Marnach untuk bekerja di Python 3.4:
sumber
Ketika saya melakukan ini, saya ingin memiliki kontrol atas detail bagaimana tabel diformat. Secara khusus, saya ingin sel header memiliki format yang berbeda dari sel tubuh, dan lebar kolom tabel hanya selebar masing-masing. Inilah solusi saya:
Inilah hasilnya:
sumber
Saya pikir ini yang Anda cari.
Ini adalah modul sederhana yang hanya menghitung lebar maksimum yang diperlukan untuk entri tabel dan kemudian hanya menggunakan rjust dan ljust untuk melakukan pencetakan data yang cantik.
Jika Anda ingin judul kiri Anda selaras, ubah saja panggilan ini:
Dari baris 53 dengan:
sumber
Saya tahu bahwa saya terlambat ke pesta, tetapi saya hanya membuat perpustakaan untuk ini yang saya pikir bisa sangat membantu. Ini sangat sederhana, itu sebabnya saya pikir Anda harus menggunakannya. Ini disebut TableIT .
Penggunaan Dasar
Untuk menggunakannya, pertama-tama ikuti instruksi pengunduhan di Halaman GitHub .
Kemudian impor:
Kemudian buat daftar daftar di mana setiap daftar bagian dalam adalah baris:
Maka yang harus Anda lakukan adalah mencetaknya:
Ini adalah output yang Anda dapatkan:
Nama Bidang
Anda dapat menggunakan nama bidang jika Anda ingin ( jika Anda tidak menggunakan nama bidang, Anda tidak harus mengatakan useFieldNames = Salah karena diatur secara default ):
Dari sana Anda akan mendapatkan:
Ada kegunaan lain untuk, misalnya Anda bisa melakukan ini:
Dari itu:
Atau Anda bisa melakukannya:
Dan dari yang Anda dapatkan:
Warna
Anda juga bisa menggunakan warna.
Anda menggunakan warna dengan menggunakan opsi warna ( secara default diatur ke Tidak Ada ) dan menentukan nilai RGB.
Menggunakan contoh dari atas:
Maka Anda akan mendapatkan:
Harap dicatat bahwa pencetakan warna mungkin tidak cocok untuk Anda, tetapi itu berfungsi sama persis dengan perpustakaan lain yang mencetak teks berwarna. Saya telah menguji dan setiap warna berfungsi. Biru tidak akan berantakan seperti halnya jika menggunakan
34m
urutan melarikan diri ANSI default (jika Anda tidak tahu apa itu tidak masalah). Bagaimanapun, itu semua berasal dari fakta bahwa setiap warna adalah nilai RGB daripada standar sistem.Info lebih lanjut
Untuk info lebih lanjut, periksa Halaman GitHub
sumber
Python murni 3
Akan dicetak
sumber
Cara mudah untuk melakukan ini adalah untuk mengulang semua kolom, mengukur lebarnya, membuat row_template untuk lebar maks, dan kemudian mencetak baris. Ini bukan apa yang Anda cari , karena dalam hal ini, pertama-tama Anda harus meletakkan judul di dalam tabel, tetapi saya pikir itu mungkin berguna bagi orang lain.
Anda menggunakannya seperti ini:
sumber
Fungsi berikut akan membuat tabel yang diminta (dengan atau tanpa numpy) dengan Python 3 (mungkin juga Python 2). Saya telah memilih untuk mengatur lebar setiap kolom agar sesuai dengan nama tim yang paling panjang. Anda dapat memodifikasinya jika Anda ingin menggunakan panjang nama tim untuk setiap kolom, tetapi akan lebih rumit.
Catatan: Untuk persamaan langsung dalam Python 2 Anda bisa mengganti
zip
denganizip
dari itertools.Ini akan menghasilkan tabel berikut:
Jika Anda ingin memiliki pemisah garis vertikal, Anda dapat menggantinya
" ".join
dengan" | ".join
.Referensi:
sumber
Saya akan mencoba untuk mengulang daftar dan menggunakan formatter CSV untuk mewakili data yang Anda inginkan.
Anda dapat menentukan tab, koma, atau karakter lain sebagai pembatas.
Jika tidak, lewati saja daftar dan cetak "\ t" setelah setiap elemen
http://docs.python.org/library/csv.html
sumber
Saya menemukan ini hanya mencari cara untuk menghasilkan kolom sederhana. Jika Anda hanya perlu kolom tanpa kerepotan , maka Anda dapat menggunakan ini:
EDIT: Saya berusaha sesederhana mungkin, dan dengan demikian melakukan beberapa hal secara manual daripada menggunakan daftar tim. Untuk menggeneralisasi ke pertanyaan aktual OP:
Ouputs:
Tetapi ini tampaknya tidak lagi lebih sederhana dari jawaban yang lain, mungkin dengan manfaatnya tidak memerlukan impor lagi. Tapi jawaban @ campkeith sudah memenuhi itu dan lebih kuat karena dapat menangani berbagai panjang label yang lebih luas.
sumber