Ini terbersih cara menulis daftar ke file, karena writelines()
doesn't menyisipkan karakter newline?
file.writelines(["%s\n" % item for item in list])
Sepertinya akan ada cara standar...
Anda dapat menggunakan loop:
with open('your_file.txt', 'w') as f:
for item in my_list:
f.write("%s\n" % item)
Di Python 2, anda juga dapat menggunakan
with open('your_file.txt', 'w') as f:
for item in my_list:
print >> f, item
Jika anda're tertarik pada satu fungsi panggilan, setidaknya menghapus tanda kurung siku []
, sehingga string yang akan dicetak bisa dibuat satu pada satu waktu (genexp daripada listcomp) - tidak ada alasan untuk mengambil semua memori yang diperlukan untuk mewujudkan seluruh daftar dari string.
Apa yang akan anda lakukan dengan file? Apakah file ini ada untuk manusia, atau program lain dengan jelas interoperabilitas persyaratan?
Jika anda hanya mencoba untuk membuat daftar ke disk untuk kemudian digunakan oleh python app, anda harus pickleing daftar.
import pickle
with open('outfile', 'wb') as fp:
pickle.dump(itemlist, fp)
Untuk membacanya kembali:
with open ('outfile', 'rb') as fp:
itemlist = pickle.load(fp)
Dengan cara sederhana ini:
lang-python outfile.write("\n".bergabung(itemlist))
Anda bisa memastikan bahwa semua item dalam daftar item adalah string menggunakan generator ekspresi:
lang-python outfile.write("\n".bergabung(str(item) untuk item dalam itemlist))
Ingat bahwa semua itemlist
daftar harus berada dalam memori, sehingga, berhati-hati tentang konsumsi memori.
Menggunakan Python 3 dan Python 2.6+ sintaks:
with open(filepath, 'w') as file_handler:
for item in the_list:
file_handler.write("{}\n".format(item))
Ini adalah platform-independen. Hal ini juga mengakhiri akhir baris dengan karakter newline, yang merupakan UNIX praktek terbaik.
Namun cara lain. Cerita bersambung ke json menggunakan simplejson (termasuk json di python 2.6):
>>> import simplejson
>>> f = open('output.txt', 'w')
>>> simplejson.dump([1,2,3,4], f)
>>> f.close()
Jika anda memeriksa output.txt:
[1, 2, 3, 4]
Hal ini berguna karena sintaks pythonic, it's yang dapat dibaca manusia, dan dapat dibaca oleh program lain dalam bahasa lain.
Saya pikir itu akan menarik untuk mengeksplorasi manfaat dari menggunakan genexp, jadi di sini's saya ambil.
Contoh pertanyaan yang menggunakan tanda kurung persegi untuk membuat daftar sementara, dan ini setara dengan:
file.writelines( list( "%s\n" % item for item in list ) )
Yang sia-sia membangun sebuah daftar sementara dari semua garis yang akan ditulis, hal ini dapat mengkonsumsi sejumlah besar memori tergantung pada ukuran daftar dan cara verbose output dari str(item)
adalah.
Drop kurung persegi (setara dengan melepas pembungkus daftar()
sebut di atas) bukannya akan lulus sementara generator untuk file.writelines()
:
file.writelines( "%s\n" % item for item in list )
Generator ini akan membuat baris baru-dihentikan representasi dari item
benda on-demand (yaitu seperti yang tertulis out). Ini bagus untuk beberapa alasan:
str(item)
lambat sana's kemajuan yang terlihat dalam file masing-masing item diprosesHal ini untuk menghindari masalah memori, seperti:
In [1]: import os
In [2]: f = file(os.devnull, "w")
In [3]: %timeit f.writelines( "%s\n" % item for item in xrange(2**20) )
1 loops, best of 3: 385 ms per loop
In [4]: %timeit f.writelines( ["%s\n" % item for item in xrange(2**20)] )
ERROR: Internal Python error in the inspect module.
Below is the traceback from this internal error.
Traceback (most recent call last):
...
MemoryError
(Aku dipicu kesalahan ini dengan membatasi Python's max. virtual memori untuk ~100MB dengan ulimit -v 102400
).
Menempatkan penggunaan memori ke satu sisi, metode ini isn't benar-benar lebih cepat dari yang asli:
In [4]: %timeit f.writelines( "%s\n" % item for item in xrange(2**20) )
1 loops, best of 3: 370 ms per loop
In [5]: %timeit f.writelines( ["%s\n" % item for item in xrange(2**20)] )
1 loops, best of 3: 360 ms per loop
(Python 2.6.2 di Linux)
Berikut adalah sintaks untuk writelines() metode
fileObject.writelines( sequence )
#!/usr/bin/python
# Open a file
fo = open("foo.txt", "rw+")
seq = ["This is 6th line\n", "This is 7th line"]
# Write sequence of lines at the end of the file.
line = fo.writelines( seq )
# Close opend file
fo.close()
Logika ini pertama akan mengkonversi item dalam daftar untuk string(str)
. Kadang-kadang daftar berisi tupel seperti
alist = [(i12,tiger),
(113,lion)]
Logika ini akan menulis ke file setiap tupel pada baris baru. Kita kemudian dapat menggunakan eval
saat loading masing-masing tuple ketika membaca file:
outfile = open('outfile.txt', 'w') # open a file in write mode
for item in list_to_persistence: # iterate over the list items
outfile.write(str(item) + '\n') # write to the file
outfile.close() # close the file
poem = '''\
Programming is fun
When the work is done
if you wanna make your work also fun:
use Python!
'''
f = open('poem.txt', 'w') # open for 'w'riting
f.write(poem) # write text to file
f.close() # close the file
Cara Kerjanya: Pertama, buka file dengan menggunakan built-in fungsi terbuka dan menentukan nama file dan mode di mana kita ingin membuka file. Mode dapat baca mode ('r'), mode tulis ('w') atau append mode ('a'). Kita juga dapat menentukan apakah kita sedang membaca, menulis, atau menambahkan dalam mode teks ('t') atau biner mode ('b'). Sebenarnya ada banyak mode yang tersedia dan membantu(buka) akan memberikan rincian lebih lanjut tentang mereka. Secara default, buka() menganggap file ke menjadi 't'ext file dan membukanya di 'r'ead mode. Dalam contoh kita, pertama kita buka file dalam menulis teks modus dan menggunakan menulis metode dari objek file untuk menulis ke file dan kemudian kami akhirnya menutup file.
Contoh di atas adalah dari buku "Byte dari Python" oleh Swaroop C H. swaroopch.com