পাইথনের কোনও ফাইলকে কীভাবে যুক্ত করবেন?


1571

আপনি ফাইলটি ওভাররাইট করার পরিবর্তে কীভাবে যুক্ত করবেন? একটি বিশেষ ফাংশন আছে যা ফাইলটিতে সংযোজন করে?

উত্তর:


2447
with open("test.txt", "a") as myfile:
    myfile.write("appended text")

10
এই টিউটোরিয়াল থেকে পাশাপাশি দরকারী হতে পারে।
ড্যান

28
আমি লক্ষ্য করেছি যে অনেকেই with open(file, "a")পদ্ধতিটি ব্যবহার করছেন । আমি সম্ভবত পুরানো ফ্যাশন, তবে কি সুবিধাopen(file, "a") ... file.close()

75
ব্লুউডট্রি: সুবিধাগুলি সি ++ এর মধ্যে RAII এর মতো। আপনি যদি ঘনিষ্ঠতা () ভুলে যান তবে ফাইলটি আসলে বন্ধ হওয়ার আগে কিছুটা সময় নিতে পারে take কোডটির একাধিক প্রস্থান পয়েন্ট, ব্যতিক্রম এবং এগুলি থাকে তখন আপনি এটি ভুলে যেতে ভেবেছিলেন এটি আরও সহজ।
পিটার

54
print("appended text", file=myfile)আরও পরিচিত এপিআইয়ের জন্যও এটি সম্ভব।
টমাস আহলে

6
@ টম: না open()হার্ডকোড নেই utf-8। এটি ব্যবহার করে locale.getpreferredencoding(False)encoding="utf-8"প্যারামিটারটি স্পষ্টভাবে পাস করুন যদি জানেন যে ফাইলটি utf-8 এনকোডিং ব্যবহার করে।
jfs

205

"অ্যা" বা "আব" মোড হিসাবে সেট করে আপনার অ্যাপেনড মোডে ফাইলটি খুলতে হবে। খোলা দেখুন ()

আপনি যখন "একটি" মোড দিয়ে খুলবেন, লেখার অবস্থান সর্বদা ফাইলের শেষে (একটি সংযোজন) থাকবে। আপনি পড়ার অনুমতি দিতে, পিছনের দিকে সন্ধান করতে এবং পড়তে "a +" দিয়ে খুলতে পারেন (তবে সমস্ত লেখাগুলি এখনও ফাইলটির শেষে থাকবে!)।

উদাহরণ:

>>> with open('test1','wb') as f:
        f.write('test')
>>> with open('test1','ab') as f:
        f.write('koko')
>>> with open('test1','rb') as f:
        f.read()
'testkoko'

দ্রষ্টব্য : 'ক' ব্যবহার করা 'ডাব্লু' দিয়ে খোলার এবং ফাইলটির শেষের দিকে অনুসন্ধান করার মতো নয় - বিবেচনা করুন যে কোনও প্রোগ্রাম যদি ফাইলটি খোলায় এবং অনুসন্ধান এবং লেখার মধ্যে লেখালেখি শুরু করে তবে কী ঘটতে পারে তা বিবেচনা করুন। কিছু অপারেটিং সিস্টেমে, 'এ' দিয়ে ফাইলটি খোলার গ্যারান্টি দেয় যে আপনার সমস্ত নিম্নলিখিত লেখাগুলি পরমাণুর সাথে ফাইলের শেষের দিকে যুক্ত হবে (এমনকি ফাইলটি অন্য লেখার দ্বারা বৃদ্ধি পাবে)।


"একটি" মোড কীভাবে চালিত হয় সে সম্পর্কে আরও কয়েকটি বিবরণ ( কেবল লিনাক্সে পরীক্ষিত )। এমনকি যদি আপনি পিছনে সন্ধান করেন, প্রতিটি লেখাই ফাইলের শেষের সাথে যুক্ত হবে:

>>> f = open('test','a+') # Not using 'with' just to simplify the example REPL session
>>> f.write('hi')
>>> f.seek(0)
>>> f.read()
'hi'
>>> f.seek(0)
>>> f.write('bye') # Will still append despite the seek(0)!
>>> f.seek(0)
>>> f.read()
'hibye'

আসলে fopen ম্যানপেজটি বলে:

অ্যাপেনড মোডে একটি ফাইল খোলার (এটি মোডের প্রথম চরিত্র হিসাবে) এই স্ট্রিমের পরবর্তী সমস্ত লেখার ক্রিয়া ফাইলের শেষের দিকে ঘটায়, কল করার আগে যেমন:

fseek(stream, 0, SEEK_END);

পুরানো সরলীকৃত উত্তর (ব্যবহার না করা with):

উদাহরণ: ( প্রকৃত প্রোগ্রামে ফাইলটি বন্ধ করতে ব্যবহার withকরুন - ডকুমেন্টেশন দেখুন )

>>> open("test","wb").write("test")
>>> open("test","a+b").write("koko")
>>> open("test","rb").read()
'testkoko'

3
তোমার দরকার নেই close()?
জোনাস স্টেইন

9
@ জোনাসস্টেইন, আপনার ব্যবহার করা উচিত with- ডকস.প্যাথথন.আর.
২ /

আপনি উইন্ডোতে কোনও টেক্সট ফাইলে লিখতে থাকলে "" পরীক্ষা "এর পরিবর্তে" test.txt "ব্যবহার করুন।
এম্বেসালো

আমি ভাবছি আমার ফাইলটি ফাইলের শেষ না হয়ে অন্য কোনও সময়ে লেখা শেষ করবে?
ইকরা।

47

আমি সবসময় এটি করি,

f = open('filename.txt', 'a')
f.write("stuff")
f.close()

এটি সহজ, তবে খুব দরকারী।


12
এটি লেখার জন্য কিছুটা সুন্দর এবং কিছুটা নিরাপদ: খোলার সাথে ('ফাইলের নাম', 'এ') এফ: f.writ ('স্টাফ')
স্যাম রেডওয়ে

2
"এ +" "এ"
ডেল পিকে

6
এটির বেশ কয়েকটি উত্তর উত্তরগুলির কয়েক বছর আগে পোস্ট করা থেকে এটি খুব কম সহজ এবং এটি আর কার্যকর নয়
টিম

2
@ টিম ক্যাসটিলিজস এটি খুব ভাল যে কেউ একাধিক লোকেশনে ভেরিয়েবলটি ব্যবহার করে যদি আপনি সর্বদা ব্যবহার করতে না চান তবে সিনট্যাক্স সহ কোনও বিকল্প পোস্ট করেছিলেন।
মার্শ

2
@ মার্শ এমনকি যদি আপনি fঅন্যান্য ফাংশনগুলিতে ভেরিয়েবলটি অতিক্রম করে থাকেন তবে একই ফাংশন যা কোনও ফাইল খোলে তা বন্ধ করা উচিত। withসিনট্যাক্স পছন্দের এই কর্ম সম্পন্ন করতে হয়।
অ্যান্ড্রু পামার

34

আপনি সম্ভবত "a"মোড আর্গুমেন্ট হিসাবে পাস করতে চান । খোলা () এর জন্য ডকগুলি দেখুন ।

with open("foo", "a") as f:
    f.write("cool beans...")

আপডেট করার জন্য মোড আর্গুমেন্টের আরও অনুমোদন রয়েছে (+), ছাঁটাই (ডাব্লু) এবং বাইনারি (খ) মোড কিন্তু ঠিক দিয়ে শুরু "a"করা আপনার সেরা বাজি।


20
fileএকটি অন্তর্নির্মিত ফাংশন ছায়া গো। এটি ভেরিয়েবলের জন্য ব্যবহার করবেন না।
মার্ক টোলোনেন

11
@ মার্কটোলোনেন: fileপাইথন ৩-এ এখন বিল্টিন নেই Even এমনকি পাইথন ২- তেও এটি খুব কম ব্যবহার করা হয় । একটি ফাইল খোলার একটি সাধারণ ক্রিয়াকলাপ। fileপাইথন 2 এবং 3 উভয়ই এখানে নাম ব্যবহার করা ঠিক
jfs

33

মূল তিনটি মোডের তুলনায় পাইথনের অনেকগুলি প্রকরণ রয়েছে, এই তিনটি মোড হ'ল:

'w'   write text
'r'   read text
'a'   append text

সুতরাং একটি ফাইল সংযোজন এটি হিসাবে সহজ:

f = open('filename.txt', 'a') 
f.write('whatever you want to write here (in append mode) here.')

তারপরে এমন মোডগুলি রয়েছে যা আপনার কোডটিকে আরও কম লাইন করে তোলে:

'r+'  read + write text
'w+'  read + write text
'a+'  append + read text

অবশেষে, বাইনারি বিন্যাসে পঠন / লেখার পদ্ধতি রয়েছে:

'rb'  read binary
'wb'  write binary
'ab'  append binary
'rb+' read + write binary
'wb+' read + write binary
'ab+' append + read binary

13

যখন আমরা এই লাইনটি ব্যবহার করি open(filename, "a"), যা aফাইল সংযোজন নির্দেশ করে, এর অর্থ বিদ্যমান ফাইলে অতিরিক্ত ডেটা toোকানোর অনুমতি দেওয়া হয়।

আপনি কেবল আপনার ফাইলের টেক্সট সংযোজন করতে এই নিম্নলিখিত লাইনগুলি ব্যবহার করতে পারেন

def FileSave(filename,content):
    with open(filename, "a") as myfile:
        myfile.write(content)

FileSave("test.txt","test1 \n")
FileSave("test.txt","test2 \n")

8

আপনি এটির printপরিবর্তে এটিও করতে পারেন write:

with open('test.txt', 'a') as f:
    print('appended text', file=f)

যদি test.txt উপস্থিত না থাকে তবে এটি তৈরি করা হবে ...


1
এটি আরও উন্নয়নের দাবিদার! অতিরিক্ত যুক্তি ছাড়াই শেষের লাইনে সঠিকভাবে যুক্ত করার এটি সহজতম উপায়।
প্রেজেমিসা চেকোভস্কি

আপনার কাছে একটি পতাকাও থাকতে পারে WRITE_TO_FILE = open('my_file.txt', mode='a')এবং তারপরে আপনার প্রোগ্রাম চলাকালীন আপনার মতো কয়েকটি প্রিন্ট থাকতে পারে print('Hello world', file=WRITE_TO_FILE)এবং যখনই আপনি কনসোলে আউটপুট দেখার সিদ্ধান্ত নেন কেবল পতাকাটি পরিবর্তন করে WRITE_TO_FILE = None। ফাইলটি যদি না হয় তবে শেষ পর্যন্ত বন্ধ করতে ভুলবেন নাNone
আলা এম।

5

আপনি r+মোডে ফাইলটি খুলতে পারেন এবং তারপরে ফাইলটির শেষে ফাইলের অবস্থানটি সেট করতে পারেন।

import os

with open('text.txt', 'r+') as f:
    f.seek(0, os.SEEK_END)
    f.write("text to add")

r+মোডে ফাইলটি খোলার ফলে আপনি শেষের পাশাপাশি অন্যান্য ফাইল পজিশনেও লিখতে পারবেন aএবং a+লেখার শেষের দিকে চাপ দিন।


3

আপনি যদি একটি ফাইল যুক্ত করতে চান

with open("test.txt", "a") as myfile:
    myfile.write("append me")

আমরা myfileনামের একটি ফাইল খোলার জন্য ভেরিয়েবলটি ঘোষণা করেছিলাম test.txt। ওপেনটিতে 2 টি আর্গুমেন্ট লাগে, আমরা যে ফাইলটি খুলতে চাই এবং সেই স্ট্রিং যা ফাইলটিতে আমাদের অনুমতি বা অপারেশন প্রকারের প্রতিনিধিত্ব করে represents

এখানে ফাইল মোড বিকল্প রয়েছে

মোডের বর্ণনা

'r' এটি ডিফল্ট মোড। এটি পড়ার জন্য ফাইল খোলে।
'ডাব্লু' এই মোড লেখার জন্য ফাইল খুলবে। 
যদি ফাইলটি বিদ্যমান না থাকে তবে এটি একটি নতুন ফাইল তৈরি করে।
যদি ফাইল বিদ্যমান থাকে তবে ফাইলটি কেটে যায়।
'x' একটি নতুন ফাইল তৈরি করে। যদি ফাইলটি ইতিমধ্যে বিদ্যমান থাকে তবে অপারেশন ব্যর্থ হয়।
'একটি' অ্যাপেনড মোডে ফাইল খুলুন। 
যদি ফাইলটি বিদ্যমান না থাকে তবে এটি একটি নতুন ফাইল তৈরি করে।
't' এটি ডিফল্ট মোড। এটি পাঠ্য মোডে খোলে।
'বি' এটি বাইনারি মোডে খোলে।
'+' এটি পড়তে এবং লেখার জন্য একটি ফাইল খুলবে (আপডেট করা)

3

'a'পরামিতি প্রকাশ করে মোড যোগ করুন। আপনি যদি with openপ্রতিটি সময় ব্যবহার করতে না চান , আপনি সহজেই এটি করার জন্য একটি ফাংশন লিখতে পারেন:

def append(txt='\nFunction Successfully Executed', file):
    with open(file, 'a') as f:
        f.write(txt)

আপনি যদি শেষের বাইরে অন্য কোথাও লিখতে চান তবে আপনি 'r+' ব্যবহার করতে পারেন :

import os

with open(file, 'r+') as f:
    f.seek(0, os.SEEK_END)
    f.write("text to add")

অবশেষে, 'w+'প্যারামিটার আরও বেশি স্বাধীনতা দেয়। বিশেষত, এটি আপনাকে ফাইলটি তৈরি করার অনুমতি দেয় যদি এটি বিদ্যমান না থাকে, পাশাপাশি বর্তমানে বিদ্যমান কোনও ফাইলের সামগ্রী খালি করে দেয়।


এই ফাংশন জন্য ক্রেডিট @Primusa যায়


1

কোনও ফাইলের শেষে আরও পাঠ্য যুক্ত করার সহজ উপায়টি হ'ল:

with open('/path/to/file', 'a+') as file:
    file.write("Additions to file")
file.close()

a+মধ্যে open(...)বিবৃতি নির্দেশ করে append মুডে ফাইল খুলুন এবং পড়া এবং লেখার অ্যাক্সেস মঞ্জুর করে।

file.close()আপনি যে কোনও ফাইলগুলি একবার ব্যবহার করে শেষ হয়ে গেলে তা বন্ধ করার জন্য ব্যবহার করা সর্বদা ভাল অনুশীলন ।


1
"ফাইলক্লজ" কে স্বয়ংক্রিয়ভাবে "উইথ" ব্লকের শেষে ডাকা হয় যা মূলশব্দটির সুবিধা advantage এছাড়াও, ওপি সংযোজনের জন্য একটি ফাইল খোলার বিষয়ে জিজ্ঞাসা করেছিল। "+" মোডটি প্রয়োজনীয় নয় যতক্ষণ না আপনি পাশাপাশি পড়তে চান।
এরিক নোলস

-6

এখানে আমার স্ক্রিপ্ট, যা মূলত লাইনের সংখ্যা গণনা করে, তারপর সংযোজন করে, আবার তাদের গণনা করে যাতে আপনার প্রমাণ রয়েছে যে এটি কাজ করেছে।

shortPath  = "../file_to_be_appended"
short = open(shortPath, 'r')

## this counts how many line are originally in the file:
long_path = "../file_to_be_appended_to" 
long = open(long_path, 'r')
for i,l in enumerate(long): 
    pass
print "%s has %i lines initially" %(long_path,i)
long.close()

long = open(long_path, 'a') ## now open long file to append
l = True ## will be a line
c = 0 ## count the number of lines you write
while l: 
    try: 
        l = short.next() ## when you run out of lines, this breaks and the except statement is run
        c += 1
        long.write(l)

    except: 
        l = None
        long.close()
        print "Done!, wrote %s lines" %c 

## finally, count how many lines are left. 
long = open(long_path, 'r')
for i,l in enumerate(long): 
    pass
print "%s has %i lines after appending new lines" %(long_path, i)
long.close()
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.