Menulis daftar ke file dengan Python

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...

Mengomentari pertanyaan (1)
Larutan

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.

Komentar (6)

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)
Komentar (7)

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.

Komentar (10)

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.

Komentar (2)

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.

Komentar (2)

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:

  • Biaya overhead memori yang kecil, bahkan untuk daftar yang sangat besar
  • Jika str(item) lambat sana's kemajuan yang terlihat dalam file masing-masing item diproses

Hal 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)

Komentar (1)

Karena saya'm malas....

import json
a = [1,2,3]
with open('test.txt', 'w') as f:
    f.write(json.dumps(a))

#Now read the file back into a Python list object
with open('test.txt', 'r') as f:
    a = json.loads(f.read())
Komentar (5)

Cerita bersambung daftar ke file teks dengan koma sepparated nilai

mylist = dir()
with open('filename.txt','w') as f:
    f.write( ','.join( mylist ) )
Komentar (0)

Secara Umum

Berikut adalah sintaks untuk writelines() metode

fileObject.writelines( sequence )

Contoh

#!/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()

Referensi

http://www.tutorialspoint.com/python/file_writelines.htm

Komentar (0)
file.write('\n'.join(list))
Komentar (2)
with open ("test.txt","w")as fp:
   for line in list12:
       fp.write(line+"\n")
Komentar (0)

Anda juga dapat menggunakan fungsi print jika anda're pada python3 sebagai berikut.

f = open("myfile.txt","wb")
print(mylist, file=f)
Komentar (1)

Mengapa don't anda mencoba

file.write(str(list))
Komentar (0)

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 
Komentar (0)

Cara lain dari iterasi, dan menambahkan baris baru:

for item in items:
    filewriter.write(f"{item}" + "\n")
Komentar (0)
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

Komentar (1)

Biarkan avg bisa daftar, maka:

In [29]: a = n.array((avg))
In [31]: a.tofile('avgpoints.dat',sep='\n',dtype = '%f')

Anda dapat menggunakan %e atau %s tergantung pada kebutuhan anda.

Komentar (0)