นี่เป็นวิธีที่สะอาดที่สุดในการเขียนรายการลงในไฟล์เนื่องจากwritelines()
ไม่ได้แทรกอักขระบรรทัดใหม่หรือไม่
file.writelines(["%s\n" % item for item in list])
ดูเหมือนว่าจะมีวิธีมาตรฐาน ...
นี่เป็นวิธีที่สะอาดที่สุดในการเขียนรายการลงในไฟล์เนื่องจากwritelines()
ไม่ได้แทรกอักขระบรรทัดใหม่หรือไม่
file.writelines(["%s\n" % item for item in list])
ดูเหมือนว่าจะมีวิธีมาตรฐาน ...
คำตอบ:
คุณสามารถใช้การวนซ้ำ:
with open('your_file.txt', 'w') as f:
for item in my_list:
f.write("%s\n" % item)
ใน Python 2 คุณยังสามารถใช้
with open('your_file.txt', 'w') as f:
for item in my_list:
print >> f, item
หากคุณกระตือรือร้นในการเรียกใช้ฟังก์ชั่นเดียวอย่างน้อยก็ลบวงเล็บเหลี่ยม[]
ออกเพื่อให้สตริงที่จะพิมพ์ทำทีละครั้ง (genexp มากกว่า listcomp) - ไม่มีเหตุผลที่จะต้องใช้หน่วยความจำทั้งหมด เพื่อทำให้รายการทั้งหมดของสตริงเป็นจริง
thefile.write('\n'.join(thelist))
thefile.write(str(item) + "\n")
คุณจะทำอย่างไรกับไฟล์นี้? ไฟล์นี้มีอยู่สำหรับมนุษย์หรือโปรแกรมอื่น ๆ ที่มีข้อกำหนดด้านความสามารถในการทำงานร่วมกันอย่างชัดเจนหรือไม่?
หากคุณเพียงแค่พยายามทำให้เป็นอนุกรมรายการไปยังดิสก์เพื่อใช้ในภายหลังโดยแอพหลามเดียวกันคุณควรจะดองรายการ
import pickle
with open('outfile', 'wb') as fp:
pickle.dump(itemlist, fp)
หากต้องการอ่านย้อนกลับ:
with open ('outfile', 'rb') as fp:
itemlist = pickle.load(fp)
open( "save.p", "wb" )
infile เป็นสิ่งที่ต้องการ:open( "save.p", "rb" )
with:
บล็อกจะปิดแฟ้มก่อนที่จะดำเนินการต่อไปข้างนอกคำสั่งต่อไปของwith
บล็อก
วิธีที่ง่ายกว่าคือ:
with open("outfile", "w") as outfile:
outfile.write("\n".join(itemlist))
คุณสามารถตรวจสอบให้แน่ใจว่ารายการทั้งหมดในรายการเป็นสตริงที่ใช้นิพจน์ตัวสร้าง
with open("outfile", "w") as outfile:
outfile.write("\n".join(str(item) for item in itemlist))
โปรดจำไว้ว่าitemlist
รายการทั้งหมดจะต้องอยู่ในหน่วยความจำดังนั้นโปรดระมัดระวังเกี่ยวกับการใช้หน่วยความจำ
ใช้Python 3และPython 2.6+ไวยากรณ์:
with open(filepath, 'w') as file_handler:
for item in the_list:
file_handler.write("{}\n".format(item))
นี่เป็นแพลตฟอร์มอิสระ นอกจากนี้ยังยุติบรรทัดสุดท้ายด้วยตัวอักษรขึ้นบรรทัดใหม่ซึ่งเป็นระบบปฏิบัติการยูนิกซ์ปฏิบัติที่ดีที่สุด
เริ่มต้นกับงูหลาม 3.6 "{}\n".format(item)
สามารถถูกแทนที่ด้วย f"{item}\n"
F-สตริง:
file_handler.write("\n".join(str(item) for item in the_list))
อีกวิธีหนึ่ง ทำให้เป็นอนุกรมกับ json โดยใช้simplejson (รวมเป็นjsonใน python 2.6):
>>> import simplejson
>>> f = open('output.txt', 'w')
>>> simplejson.dump([1,2,3,4], f)
>>> f.close()
หากคุณตรวจสอบ output.txt:
[1, 2, 3, 4]
สิ่งนี้มีประโยชน์เนื่องจากไวยากรณ์เป็น pythonic สามารถอ่านได้โดยมนุษย์และสามารถอ่านได้โดยโปรแกรมอื่นในภาษาอื่น
ฉันคิดว่ามันน่าสนใจที่จะสำรวจประโยชน์ของการใช้ genexp ดังนั้นนี่คือสิ่งที่ฉันใช้
ตัวอย่างในคำถามใช้เครื่องหมายวงเล็บเหลี่ยมเพื่อสร้างรายการชั่วคราวและเทียบเท่ากับ:
file.writelines( list( "%s\n" % item for item in list ) )
ซึ่งไม่จำเป็นต้องสร้างรายการชั่วคราวของทุกสายที่จะเขียนออกมานี้อาจใช้จำนวนเงินที่สำคัญของหน่วยความจำขึ้นอยู่กับขนาดของรายการของคุณและวิธีการอย่างละเอียดการส่งออกของที่str(item)
มี
วางวงเล็บ (เทียบเท่าลบห่อlist()
โทรด้านบน) แทนจะผ่านชั่วคราวกำเนิดเพื่อfile.writelines()
:
file.writelines( "%s\n" % item for item in list )
เครื่องกำเนิดไฟฟ้านี้จะสร้างการแสดงitem
วัตถุของคุณตามต้องการ (เช่นที่เขียนออกมา) นี่เป็นเหตุผลที่ดี:
str(item)
ช้าแสดงว่าไฟล์มีความคืบหน้าในการดำเนินการแต่ละรายการวิธีนี้จะหลีกเลี่ยงปัญหาหน่วยความจำเช่น:
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
(ฉันเรียกใช้ข้อผิดพลาดนี้โดย จำกัด หน่วยความจำเสมือนสูงสุดของ Python ไว้ที่ ~ 100MB ด้วยulimit -v 102400
)
ทำให้การใช้งานหน่วยความจำไปด้านใดด้านหนึ่งวิธีนี้ไม่ได้เร็วกว่าเดิมจริง ๆ :
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 บน Linux)
เพราะฉันขี้เกียจ ....
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())
with open ('Sp1.txt', 'a') as outfile:
json.dump (sp1_segments, outfile)
logger.info ("Saved sp_1 segments")
; ปัญหาคือโปรแกรมของฉันทำงานสามครั้งและผลลัพธ์ที่ได้จากการดำเนินการสามรายการเริ่มคลอน มีวิธีใดที่จะเพิ่ม 1-2 บรรทัดว่างเพื่อให้ผลลัพธ์จากการทดสอบแต่ละครั้งสามารถมองเห็นได้
json.dump(sp1_segments + "\n\n", outfile)
?
เรียงลำดับรายการเป็นไฟล์ข้อความด้วยค่าที่คั่นด้วยจุลภาค
mylist = dir()
with open('filename.txt','w') as f:
f.write( ','.join( mylist ) )
ต่อไปนี้เป็นไวยากรณ์สำหรับวิธีwritelines ()
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()
file.write('\n'.join(list))
file
ตัวแปรอย่างไร
with open ("test.txt","w")as fp:
for line in list12:
fp.write(line+"\n")
คุณสามารถใช้ฟังก์ชั่นการพิมพ์ได้หากคุณใช้ python3 ดังนี้
f = open("myfile.txt","wb")
print(mylist, file=f)
ทำไมคุณไม่ลอง
file.write(str(list))
string(str)
ตรรกะนี้เป็นครั้งแรกจะแปลงรายการในรายการ บางครั้งรายการมีสิ่งอันดับเช่น
alist = [(i12,tiger),
(113,lion)]
ตรรกะนี้จะเขียนไฟล์แต่ละ tuple ในบรรทัดใหม่ เราสามารถใช้eval
ในขณะที่โหลดแต่ละ tuple เมื่ออ่านไฟล์:
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
อีกวิธีในการวนซ้ำและเพิ่มบรรทัดใหม่:
for item in items:
filewriter.write(f"{item}" + "\n")
ใน python> 3 คุณสามารถใช้print
และ*
สำหรับการเอาออกอาร์กิวเมนต์:
with open("fout.txt", "w") as fout:
print(*my_list, sep="\n", file=fout)
ให้ avg เป็นรายการจากนั้น:
In [29]: a = n.array((avg))
In [31]: a.tofile('avgpoints.dat',sep='\n',dtype = '%f')
คุณสามารถใช้%e
หรือ%s
ขึ้นอยู่กับความต้องการของคุณ
ในPython3คุณสามารถใช้วงนี้
with open('your_file.txt', 'w') as f:
for item in list:
f.print("", item)
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
วิธีการทำงาน: ขั้นแรกให้เปิดไฟล์โดยใช้ฟังก์ชั่นเปิดในตัวและระบุชื่อของไฟล์และโหมดที่เราต้องการเปิดไฟล์ โหมดสามารถเป็นโหมดอ่าน ('r'), โหมดเขียน ('w') หรือโหมดต่อท้าย ('a') นอกจากนี้เรายังสามารถระบุได้ว่าเรากำลังอ่านเขียนหรือต่อท้ายในโหมดข้อความ ('t') หรือโหมดไบนารี ('b') มีโหมดอื่น ๆ อีกมากมายที่พร้อมใช้งานและช่วย (เปิด) จะให้รายละเอียดเพิ่มเติมเกี่ยวกับพวกเขา โดยค่าเริ่มต้น open () จะถือว่าไฟล์เป็น 't'ext fi le และเปิดในโหมด' r'ead ในตัวอย่างของเราเราจะเปิดไฟล์ในโหมดการเขียนข้อความและใช้วิธีการเขียนของวัตถุไฟล์เพื่อเขียนไปยังไฟล์จากนั้นเราจะปิดไฟล์
ตัวอย่างข้างต้นมาจากหนังสือ "A Byte of Python" โดย Swaroop C H. swaroopch.com
writelines
จะไม่เพิ่มบรรทัดใหม่เนื่องจากจะสะท้อนreadlines
ซึ่งยังไม่ได้ลบออก