পাইথন সহ একটি ফাইলে একটি লিখিত লিখন


673

writelines()নতুন লাইনের চরিত্রগুলি sertোকানো না হওয়ায় এটি কি কোনও ফাইলের জন্য একটি লিস্ট লেখার সবচেয়ে পরিষ্কার উপায় ?

file.writelines(["%s\n" % item  for item in list])

দেখে মনে হচ্ছে কোনও মানক উপায় থাকবে ...


37
মনে রাখবেন যে writelinesএটি নতুন লাইনগুলিকে যুক্ত করে না কারণ এটি মিরর করে readlines, যা এগুলি সরিয়ে দেয় না।
সিঙ্গেলাইজেশন নির্মূল

উত্তর:


908

আপনি একটি লুপ ব্যবহার করতে পারেন:

with open('your_file.txt', 'w') as f:
    for item in my_list:
        f.write("%s\n" % item)

পাইথন 2 এ, আপনিও ব্যবহার করতে পারেন

with open('your_file.txt', 'w') as f:
    for item in my_list:
        print >> f, item

যদি আপনি একটি একক ফাংশন কলের বিষয়ে আগ্রহী হন, তবে কমপক্ষে স্কোয়ার বন্ধনীগুলি সরিয়ে ফেলুন [], যাতে মুদ্রণযোগ্য স্ট্রিংগুলি একবারে তৈরি হয়ে যায় (তালিকার সংস্থার পরিবর্তে জিনপ এক্স) - প্রয়োজনীয় সমস্ত স্মৃতি গ্রহণের কারণ নেই স্ট্রিংয়ের পুরো তালিকাটি বাস্তবায়িত করতে।


7
এটি মারাত্মক জটিল নয়, তবে কেন কেবল আচার বা জসন ব্যবহার করবেন না যাতে সিরিয়ালাইজেশন এবং deserialization সম্পর্কে আপনার চিন্তা করতে হবে না?
জেসন বেকার

82
উদাহরণস্বরূপ আপনি একটি আউটপুট পাঠ্য ফাইল চান যা প্রতি লাইনে একটি আইটেম সহ সহজেই পড়া, সম্পাদনা করা যায়। খুব কমই বিরল ইচ্ছা ;-)।
অ্যালেক্স মার্তেলি

1
আমি দেখতে পেলাম যে প্রথমটির মধ্যে Py n পাইথন ২. / /
জর্জি রডরিগেজ

11
এটি শেষে একটি অতিরিক্ত নতুনলাইন চরিত্র লিখবে ... লুপের পরিবর্তে আপনি কেবল লিখতে পারেনthefile.write('\n'.join(thelist))
Tgsmith61591

3
আমি যুক্ত করব: "তালিকাটি ডেটাটাইপ সম্পর্কে সতর্ক থাকুন"। আমি কিছু অদ্ভুত ফলাফল পাচ্ছি, সম্ভবত এটি কাউকে সহায়তা করতে পারে:thefile.write(str(item) + "\n")
আইপিআর

383

আপনি ফাইলটি কী করতে যাচ্ছেন? এই ফাইলটি কি মানুষের জন্য, বা অন্যান্য প্রোগ্রামগুলির জন্য স্পষ্ট আন্তঃআযোগাযোগ্যতার প্রয়োজনীয়তা রয়েছে?

আপনি ঠিক একই পাইথন অ্যাপ দ্বারা পরে ব্যবহার করার জন্য ডিস্কে একটি তালিকা ধারাবাহিকভাবে বের করার চেষ্টা হয়, আপনি হওয়া উচিত pickleing তালিকা।

import pickle

with open('outfile', 'wb') as fp:
    pickle.dump(itemlist, fp)

এটি আবার পড়তে:

with open ('outfile', 'rb') as fp:
    itemlist = pickle.load(fp)

35
+1 - পাইথনের সিরিয়ালাইজেশন অন্তর্নির্মিত হওয়ার পরে কেন চাকাটি পুনঃস্থাপন করবেন?
জেসন বেকার

20
+1 - open( "save.p", "wb" )open( "save.p", "rb" )
আউটফাইলে

2
সমস্যাটি হল তালিকাটি অবশ্যই মেমরির সাথে মাপসই করা উচিত। যদি এটি না হয়, তবে লাইন লাইন আসলেই একটি সম্ভাব্য কৌশল (বা অন্যথায় স্ট্যাকওভারফ্লো . com/Qestions/7180212/… হিসাবে কিছু বিকল্পের সাথে চলছে )
ফিলিপ্পো মাজা

1
: পাইথন 2 ব্যবহার পরিবর্তে 'RB' এর 'R' যখন জরান পড়া আপনি "অনিরাপদ স্ট্রিং জরান ValueError" পেতে তাহলে
queise

1
@ সেরাফিম: না; with:ব্লক পরবর্তী প্রতিবেদনটি বাইরে চালিয়ে যাওয়ার আগে ফাইল বন্ধ হয়ে যাবে withব্লক।
সিঙ্গেলাইজেশন ইলিমিনেশন

285

সহজ উপায় হ'ল:

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তালিকা মেমরিতে থাকা দরকার, তাই মেমরির খরচ সম্পর্কে যত্ন নিন take


23
কোনও পূর্ববর্তী নিউলাইন নেই, লুপের তুলনায় 2x স্পেস ব্যবহার করে।
ডেভ

7
অবশ্যই প্রথমে যে প্রশ্নটি মনে আসে তা হ'ল ওপিকে একটি নতুন লাইনে শেষ হওয়া দরকার এবং স্থানের পরিমাণের পরিমাণ কিনা তা। অকাল অপটিমাইজেশন সম্পর্কে তারা কী বলে তা আপনি জানেন।
জেসন বাকের

15
একটি নেতিবাচক দিক: এটি ফাইলটি লেখার আগে মেমরির জন্য সমস্ত বিষয়বস্তু তৈরি করে, তাই পিক মেমরির ব্যবহার বেশি হতে পারে।
রবএম

4
আমি কখনই এটিকে কাজে লাগাতে পারি না। আমি এই ত্রুটিটি পেয়েছি: "পাঠ্য = '\ n'. জোইন (নাম তালিকা) +' \ n 'প্রকারের ত্রুটি: ক্রম আইটেম 0: প্রত্যাশিত স্ট্রিং, তালিকা পাওয়া গেছে"
ড্যান

2
আপনাকে নিশ্চিত করতে হবে যে 'নেমলিস্টে' সমস্ত উপাদানগুলি স্ট্রিং।
ওসন্তানা

94

পাইথন 3 এবং পাইথন 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- স্ট্রিং দিয়ে প্রতিস্থাপিত করা যেতে পারে: f"{item}\n"


আমি শেষ আইটেমটির জন্য "\ n" যুক্ত করতে চাই না, কী করব? শর্ত চাই না
পিড

4
@pyd file_handler.write("\n".join(str(item) for item in the_list))
লুপটির

88

তবুও অন্য উপায়। ব্যবহার JSON করতে ধারাবাহিকভাবে simplejson (হিসেবে অন্তর্ভুক্ত JSON পাইথন 2.6 মধ্যে):

>>> import simplejson
>>> f = open('output.txt', 'w')
>>> simplejson.dump([1,2,3,4], f)
>>> f.close()

আপনি যদি আউটপুট.টেক্সট পরীক্ষা করেন:

[১, ২, ৩, ৪]

এটি দরকারী কারণ সিনট্যাক্সটি পাইথোনিক, এটি মানব পাঠযোগ্য এবং এটি অন্যান্য প্রোগ্রামগুলির দ্বারা অন্য প্রোগ্রামগুলি দ্বারা পড়া যেতে পারে।


39

আমি ভেবেছিলাম জেন এক্সপ ব্যবহারের সুবিধাগুলি অন্বেষণ করা আকর্ষণীয় হবে, তাই আমার গ্রহণযোগ্যতা এখানে।

প্রশ্নের উদাহরণটিতে অস্থায়ী তালিকা তৈরি করতে বর্গাকার বন্ধনী ব্যবহার করা হয় এবং এর সমতুল্য:

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

(পাইথনের সর্বাধিক ভার্চুয়াল মেমরির সাথে ~ 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

(লিনাক্সে পাইথন ২.6.২)


20

কারণ আমি অলস ....

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

তালিকাগুলি কি জেসন সিরিয়ালাইজযোগ্য?
কেরাজী আর

1
হ্যাঁ, তারা হয়!
কমান্ডোস্কর্চ

1
আমদানি জেসন; পরীক্ষার তালিকা = [1,2,3]; list_as_a_string = json.dumps (টেস্ট_লিস্ট); #list_as_a_string এখন স্ট্রিং '[1,2,3]
CommandoScorch

আমি এটা করছি with open ('Sp1.txt', 'a') as outfile: json.dump (sp1_segments, outfile) logger.info ("Saved sp_1 segments"); সমস্যাটি হ'ল আমার প্রোগ্রামটি তিনবার চলছে এবং তিনটি রানের ফলাফল মশাল। 1-2 টি খালি লাইন যুক্ত করার কোনও উপায় কী যাতে প্রতিটি রান থেকে ফলাফলগুলি বোধগম্য হয়?
kRazzy আর

1
কাফনের কাপড়! আপনি কি পরিবর্তে করতে পারেন json.dump(sp1_segments + "\n\n", outfile)?
কমান্ডোস্কর্চ

19

কমা বিচ্ছিন্ন মান সহ পাঠ্য ফাইলে তালিকাটিকে সিরিয়ালাইজ করুন

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

14

সাধারণভাবে

রাইটলাইনগুলি () পদ্ধতির জন্য বাক্য গঠনটি নীচে দেওয়া হল

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

উল্লেখ

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


13
file.write('\n'.join(list))

1
একটি নোট করা উচিত যে এটির জন্য পাঠ্য হিসাবে সত্যই প্ল্যাটফর্ম-নিরপেক্ষ হতে ফাইলটি খোলার প্রয়োজন হবে।
জেসন বেকার

2
আপনি fileপরিবর্তনশীল কিভাবে পাবেন ?
জোনাথন মোরালেস


7

আপনি পাইথন 3 এ থাকলে মুদ্রণ ফাংশনটিও ব্যবহার করতে পারেন।

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

এটি কেবল মাইফাইল.টেক্সটে একটি লাইন রাখে না, এরকম কিছু: ['a', 'b', 'c'] প্রতিটি লাইনে প্রতিটি a, b, c লেখার পরিবর্তে।
হ্যারি ডুং


2

এই যুক্তি প্রথমে তালিকার আইটেমগুলিতে রূপান্তর করবে string(str)। কখনও কখনও তালিকার মতো একটি টুপল থাকে

alist = [(i12,tiger), 
(113,lion)]

এই যুক্তি একটি নতুন লাইনে প্রতিটি tuple ফাইল করতে লিখতে হবে। evalফাইলটি পড়ার সময় আমরা প্রতিটি টিপল লোড করার সময় পরে ব্যবহার করতে পারি :

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 

1

পুনরাবৃত্তি এবং নিউলাইন যোগ করার অন্য একটি উপায়:

for item in items:
    filewriter.write(f"{item}" + "\n")

0

পাইথন> 3 এ আপনি ব্যবহার করতে পারেন printএবং *যুক্তি আনপ্যাকিংয়ের জন্য:

with open("fout.txt", "w") as fout:
    print(*my_list, sep="\n", file=fout)

-2

ইন Python3 আপনি এই লুপ ব্যবহার করতে পারি

with open('your_file.txt', 'w') as f:
    for item in list:
        f.print("", item)

-3

গড়ের তালিকাটি আসুন, তারপরে:

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

আপনি ব্যবহার করতে পারেন %eবা %sআপনার প্রয়োজন উপর নির্ভর করে।


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

এটি কীভাবে কাজ করে: প্রথমে বিল্ট-ইন ওপেন ফাংশনটি ব্যবহার করে এবং fi লে এবং মোডে আমরা open লে খুলতে চাই তার নাম উল্লেখ করে একটি openেল খুলুন। মোডটি একটি পঠন মোড ('r'), রাইট মোড ('ডাব্লু') বা অ্যাপেন্ড মোড ('এ') হতে পারে। আমরা পাঠ্য মোড ('টি') বা বাইনারি মোডে ('বি') পড়ছি, লিখছি বা সংযোজন করছি কিনা তাও আমরা উল্লেখ করতে পারি। আসলে আরও অনেকগুলি মোড উপলব্ধ রয়েছে এবং সহায়তা (খোলা) তাদের সম্পর্কে আপনাকে আরও বিশদ দেবে। ডিফল্টরূপে, ওপেন () fi le কে 't'ext fi le হিসাবে বিবেচনা করে এবং এটি' r'ead মোডে খোলে। আমাদের উদাহরণস্বরূপ, আমরা প্রথমে লিখিত পাঠ্য মোডে fi লে খুলি এবং fi লেতে লিখতে object লে অবজেক্টের লেখার পদ্ধতিটি ব্যবহার করি এবং তারপরে আমরা ally লে বন্ধ করব।

উপরোক্ত উদাহরণে বুক "পাইথন একটি বাইট" Swaroop সি এইচ দ্বারা থেকে swaroopch.com


5
এটি একটি ফাইলকে একটি স্ট্রিং লিখেছে,
ওপির
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.