आप पायथन में एक फ़ाइल को कैसे जोड़ते हैं?


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
bluewoodtree: लाभ C ++ में RAII के समान हैं। यदि आप पास भूल जाते हैं (), तो फ़ाइल को वास्तव में बंद होने से पहले कुछ समय लग सकता है। यह आसान है कि आप इसे भूल सकते हैं जब कोड में कई निकास बिंदु, अपवाद और इतने पर हों।
पेटर

54
print("appended text", file=myfile)एक अधिक परिचित एपीआई के लिए भी संभव है।
थॉमस अहले

6
@ टॉम: नहीं। open()हार्डकोड नहीं है utf-8। इसका उपयोग करता है locale.getpreferredencoding(False)encoding="utf-8"यदि आप जानते हैं कि फ़ाइल utf-8 एन्कोडिंग का उपयोग करता है, तो पैरामीटर स्पष्ट रूप से पास करें ।
jfs

205

आपको मोड के रूप में "ए" या "एब" सेट करके फ़ाइल को एपेंड मोड में खोलना होगा। खुला देखें ()

जब आप "ए" मोड के साथ खुलते हैं, तो लिखने की स्थिति हमेशा फ़ाइल (एक परिशिष्ट) के अंत में होगी । आप पढ़ने की अनुमति देने के लिए "ए +" के साथ खुल सकते हैं, पीछे की ओर और पढ़ने की तलाश कर सकते हैं (लेकिन सभी लिखते हैं फिर भी फ़ाइल के अंत में होगा!)।

उदाहरण:

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

नोट : 'a' का उपयोग करना 'w' के साथ खोलने और फ़ाइल के अंत की मांग के समान नहीं है - विचार करें कि क्या हो सकता है यदि कोई अन्य फ़ाइल फ़ाइल को खोले और तलाश और लेखन के बीच लिखना शुरू कर दे। कुछ ऑपरेटिंग सिस्टम पर, फ़ाइल को 'ए' के ​​साथ खोलना इस बात की गारंटी देता है कि आपके सभी निम्नलिखित लिखों को फ़ाइल के अंत में (यहां तक ​​कि फ़ाइल अन्य राइट्स द्वारा बढ़ता है) के लिए एटमॉसी से जोड़ा जाएगा।


"A" मोड कैसे काम करता है ( केवल लिनक्स पर परीक्षण ) के बारे में कुछ और विवरण । यहां तक ​​कि अगर आप वापस चाहते हैं, तो हर लेखन फ़ाइल के अंत में संलग्न होगा:

>>> 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
@JonasStein, आपको उपयोग करना चाहिए with- docs.python.org/2/whatsnew/2.6.html#pep-343-the-with-statement
sinelaw

यदि आप विंडोज़ पर एक टेक्स्ट फ़ाइल में लिख रहे हैं, तो केवल "परीक्षण" के बजाय "test.txt" का उपयोग करें।
9

मुझे आश्चर्य है कि जब मेरी फ़ाइल किसी अन्य बिंदु पर लिखना समाप्त कर देगी लेकिन फ़ाइल का अंत नहीं?
इकरा

47

मैं हमेशा ऐसा करता हूं,

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

यह सरल है, लेकिन बहुत उपयोगी है।


12
थोड़ा सा अच्छा और लिखने के लिए थोड़ा सा सुरक्षित: खुले ('फ़ाइलनाम', 'क') के रूप में f: f.write ('सामान')
सैम रेडवे


6
यह इस एक से पहले कुछ वर्षों में पोस्ट किए गए अधिकांश उत्तरों से कम सरल है, और यह अधिक उपयोगी नहीं है
टिम

2
@Tim Castelijns यह अच्छा है कि किसी ने वाक्यविन्यास के साथ एक विकल्प पोस्ट किया है जिसे आप हमेशा उपयोग नहीं करना चाहते हैं यदि आप कई स्थानों पर चर का उपयोग कर रहे हैं।
दलदल

2
@ मार्श आप fअन्य कार्यों के लिए चर पास कर रहे हैं, भले ही एक फ़ाइल खोलने वाले एक ही फ़ंक्शन को इसे बंद करना चाहिए। withवाक्य रचना पसंदीदा तरीका यह पूरा करने के लिए है।
एंड्रयू पामर

34

आप शायद "a"मोड तर्क के रूप में पास करना चाहते हैं । खुले के लिए डॉक्स देखें ()

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

अपडेट (+), ट्रंकटिंग (w) और बाइनरी (b) मोड को अपडेट करने के लिए मोड तर्क के अन्य क्रमपरिवर्तन हैं, लेकिन बस के साथ शुरू करना "a"आपकी सबसे अच्छी शर्त है।


20
fileएक निर्मित समारोह में छाया। चर के लिए इसका इस्तेमाल न करें।
मार्क टॉलेनन

11
@MarkTolonen: fileअब Python 3 में बिलियन नहीं है । Python 2 में भी, इसका उपयोग बहुत कम किया जाता है । फ़ाइल खोलना एक सामान्य ऑपरेशन है। fileपायथन 2 और 3 पर यहाँ नाम का उपयोग करना ठीक है । 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फ़ाइल को जोड़ने का संकेत देता है, तो इसका मतलब है कि मौजूदा फ़ाइल में अतिरिक्त डेटा डालने की अनुमति है।

आप अपनी फ़ाइल में पाठ को जोड़ने के लिए बस निम्नलिखित पंक्तियों का उपयोग कर सकते हैं

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

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 तर्क लेता है, वह फ़ाइल जिसे हम खोलना चाहते हैं और एक स्ट्रिंग जो अनुमति या संचालन के प्रकार का प्रतिनिधित्व करती है जिसे हम फ़ाइल पर करना चाहते हैं

यहाँ फ़ाइल मोड विकल्प है

मोड विवरण

'r' यह डिफ़ॉल्ट मोड है। यह पढ़ने के लिए फ़ाइल खोलता है।
'w' यह मोड लिखने के लिए फाइल खोलता है। 
यदि फ़ाइल मौजूद नहीं है, तो यह एक नई फ़ाइल बनाता है।
यदि फ़ाइल मौजूद है तो यह फ़ाइल को काट देती है।
'x' एक नई फ़ाइल बनाता है। यदि फ़ाइल पहले से मौजूद है, तो कार्रवाई विफल हो जाती है।
'a' एपेंड मोड में फाइल खोलें। 
यदि फ़ाइल मौजूद नहीं है, तो यह एक नई फ़ाइल बनाता है।
't' यह डिफ़ॉल्ट मोड है। यह टेक्स्ट मोड में खुलता है।
'b' यह बाइनरी मोड में खुलता है।
'+' यह पढ़ने और लिखने (अपडेट) के लिए एक फ़ाइल खोलेगा

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(...)बयान का निर्देश संलग्न मोड में फ़ाइल को खोलने और पढ़ने के लिए और लिखने उपयोग की अनुमति देता है।

file.close()किसी भी फाइल को बंद करने के लिए उपयोग करने के लिए हमेशा अच्छा अभ्यास होता है, जिसे आपने एक बार उपयोग करने के बाद खोला है।


1
"file.close" को स्वचालित रूप से "with" ब्लॉक के अंत में कहा जाता है, जो कि कीवर्ड का लाभ है। साथ ही, ओपी ने अपील करने के लिए एक फ़ाइल खोलने के बारे में पूछा। जब तक आप पढ़ना नहीं चाहते हैं तब तक "+" मोड आवश्यक नहीं है।
एरिक नोल्स

-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()
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.