পাইথন ফাইল মোড "ডাব্লু +" দ্বারা বিভ্রান্ত


201

ডক থেকে ,

মোডগুলি 'আর +', 'ডাব্লু +' এবং 'এ +' আপডেট করার জন্য ফাইলটি খুলুন (নোট করুন যে 'ডাব্লু +' ফাইলটি ছাঁটাই করে)। বাইনারি মোডে ফাইলগুলি খোলার জন্য মোডে 'বি' যুক্ত করুন, বাইনারি এবং পাঠ্য ফাইলগুলির মধ্যে পার্থক্যকারী সিস্টেমগুলিতে; যে সিস্টেমগুলিতে এই পার্থক্য নেই, সেখানে 'বি' যুক্ত করার কোনও প্রভাব নেই।

এবং এখানে

ডাব্লু +: লেখার এবং পড়া উভয়ের জন্য একটি ফাইল খোলে। যদি ফাইলটি বিদ্যমান থাকে তবে বিদ্যমান ফাইলটি ওভাররাইট করে। যদি ফাইলটি বিদ্যমান না থাকে তবে পড়তে এবং লেখার জন্য একটি নতুন ফাইল তৈরি করে।

তবে, কীভাবে ফাইল খুলতে হবে w+?


27
আমি এই চিত্রটি বেশ দরকারী বলে মনে করেছি।
ত্বিক

উত্তর:


132

ধরা যাক আপনি withযেমনটি হওয়া উচিত তেমন স্টেটমেন্ট দিয়ে ফাইলটি খুলছেন । তারপরে আপনি নিজের ফাইল থেকে পড়তে এরকম কিছু করতে চাইবেন:

with open('somefile.txt', 'w+') as f:
    # Note that f has now been truncated to 0 bytes, so you'll only
    # be able to read data that you write after this point
    f.write('somedata\n')
    f.seek(0)  # Important: return to the top of the file before reading, otherwise you'll just read an empty string
    data = f.read() # Returns 'somedata\n'

দ্রষ্টব্য f.seek(0)- আপনি যদি এটি ভুলে যান তবে f.read()কলটি ফাইলের শেষ থেকে পড়ার চেষ্টা করবে এবং খালি স্ট্রিংটি ফিরে আসবে।


1
"0 বাইটে কাটা" অর্থ কী?
নাসিফ ইমতিয়াজ ওহি

22
@ নাসিফমিটিয়াজহী - পাইথন ডক্স বলছে যে w+"ফাইল উপস্থিত থাকলে বিদ্যমান ফাইলটি ওভাররাইট করে"। সুতরাং আপনি w+এটির সাথে কোনও ফাইল খোলার সাথে সাথে এটি এখন একটি খালি ফাইল: এটিতে 0 বাইট রয়েছে। যদি এটিতে ডেটা থাকে তবে সেই ডেটাটি কেটে ফেলা হয়েছে - কেটে ফেলা হয়েছে এবং ফেলে দেওয়া হয়েছে - এবং এখন ফাইলের আকার 0 বাইট, সুতরাং ফাইলটি খোলার আগে আপনি যে কোনও ডেটা অস্তিত্ব রাখতে পারবেন না w+। আপনি যদি পূর্বের ডেটাটি পড়তে এবং এটিতে যুক্ত করতে চান তবে আপনার r+পরিবর্তে ব্যবহার করা উচিত w+
রম্নান

শীর্ষে নতুন ডেটা যুক্ত করবেন কীভাবে?
বেকা বুখ্রাডজে

1
@ বেকা বুখ্রাডজে - আপনার যদি একটি প্রশ্ন থাকে তবে "একটি প্রশ্ন জিজ্ঞাসা করুন" বোতামটি ক্লিক করুন, যেখানে এটি শত শত লোক দেখতে পাবেন। কেবলমাত্র "মন্তব্য যুক্ত করুন" বোতামটি ক্লিক করবেন না যেখানে কেবল একজন বা দু'জন লোক এটি দেখতে পাবে।
রম্মান

429

ফাইল খোলার বিভিন্ন পদ্ধতির তালিকা এখানে রয়েছে:

  • R

    কেবল পড়ার জন্য একটি ফাইল খোলে। ফাইল পয়েন্টারটি ফাইলের শুরুতে স্থাপন করা হয়। এটি ডিফল্ট মোড।

  • RB

    কেবল বাইনারি ফর্ম্যাটে পড়ার জন্য একটি ফাইল খোলে। ফাইল পয়েন্টারটি ফাইলের শুরুতে স্থাপন করা হয়। এটি ডিফল্ট মোড।

  • R + +

    উভয়ই পড়া এবং লেখার জন্য একটি ফাইল খোলে। ফাইল পয়েন্টারটি ফাইলের শুরুতে হবে।

  • RB + +

    উভয় বাইনারি ফর্ম্যাটে পড়া এবং লেখার জন্য একটি ফাইল খোলে। ফাইল পয়েন্টারটি ফাইলের শুরুতে হবে।

  • W

    কেবল লেখার জন্য একটি ফাইল খোলে। ফাইল উপস্থিত থাকলে ফাইলটি ওভাররাইট করে। যদি ফাইলটি না থাকে তবে লেখার জন্য একটি নতুন ফাইল তৈরি করে।

  • WB

    কেবল বাইনারি ফর্ম্যাটে লেখার জন্য একটি ফাইল খোলে। ফাইল উপস্থিত থাকলে ফাইলটি ওভাররাইট করে। যদি ফাইলটি না থাকে তবে লেখার জন্য একটি নতুন ফাইল তৈরি করে।

  • W + +

    লেখালেখি এবং পড়া উভয়ের জন্য একটি ফাইল খোলে। যদি ফাইলটি বিদ্যমান থাকে তবে বিদ্যমান ফাইলটি ওভাররাইট করে। যদি ফাইলটি বিদ্যমান না থাকে তবে পড়তে এবং লেখার জন্য একটি নতুন ফাইল তৈরি করে।

  • WB + +

    বাইনারি ফর্ম্যাটে লেখার এবং পড়া উভয়ের জন্য একটি ফাইল খোলে। যদি ফাইলটি বিদ্যমান থাকে তবে বিদ্যমান ফাইলটি ওভাররাইট করে। যদি ফাইলটি বিদ্যমান না থাকে তবে পড়তে এবং লেখার জন্য একটি নতুন ফাইল তৈরি করে।

  • একটি

    সংযোজন করার জন্য একটি ফাইল খোলে। ফাইল উপস্থিত থাকলে ফাইলের পয়েন্টারটি ফাইলের শেষে থাকে। অর্থাৎ ফাইলটি অ্যাডেন্ড মোডে রয়েছে। যদি ফাইলটি বিদ্যমান না থাকে তবে এটি লেখার জন্য একটি নতুন ফাইল তৈরি করে।

  • AB

    বাইনারি ফর্ম্যাটে সংযোজন করার জন্য একটি ফাইল খোলে। ফাইল উপস্থিত থাকলে ফাইলের পয়েন্টারটি ফাইলের শেষে থাকে। অর্থাৎ ফাইলটি অ্যাডেন্ড মোডে রয়েছে। যদি ফাইলটি বিদ্যমান না থাকে তবে এটি লেখার জন্য একটি নতুন ফাইল তৈরি করে।

  • একটি +

    সংযোজন এবং পড়া উভয়ের জন্য একটি ফাইল খোলে। ফাইল উপস্থিত থাকলে ফাইলের পয়েন্টারটি ফাইলের শেষে থাকে। ফাইলটি অ্যাপেন্ড মোডে খোলে। যদি ফাইলটি না থাকে তবে এটি পড়ার এবং লেখার জন্য একটি নতুন ফাইল তৈরি করে।

  • AB + +

    বাইনারি ফর্ম্যাটে সংযোজন এবং পড়া উভয়ের জন্য একটি ফাইল খোলে। ফাইল উপস্থিত থাকলে ফাইলের পয়েন্টারটি ফাইলের শেষে থাকে। ফাইলটি অ্যাপেন্ড মোডে খোলে। যদি ফাইলটি না থাকে তবে এটি পড়ার এবং লেখার জন্য একটি নতুন ফাইল তৈরি করে।


সুতরাং সমস্ত নিবিড় উদ্দেশ্যে, r + এবং ডাব্লু + এক কি?
নিক হিউরিচ

21
@ হামডিনগার: না, w+একটি নতুন ফাইল তৈরি করে বা বিদ্যমান ফাইলকে ছাঁটাই করে, তারপরে এটি পড়ার জন্য এবং লেখার জন্য খোলে; r+একটি বিদ্যমান ফাইল এটি পড়া এবং লেখার জন্য কাটা ছাড়াই খোলে। খুব আলাদা।
9:30 এ abarnert

এছাড়াও, @ অলোকআরওয়ালের উত্তর হিসাবে, এটি মোডগুলির একটি বিস্তৃত তালিকা বলে দাবি করে, তবে তা নয়।
অবার্নেট

1
এটি একাধিক পরামিতিগুলির সাথে ফাংশনের মতো আরও কার্যকরী হওয়ায় মোডগুলির একটি বিস্তৃত তালিকা দেওয়া বরং নির্বোধ হবে। r, wবা aএক্সক্লুসিভ তবে bএগুলির যে কোনও একটিতে যুক্ত করা যেতে পারে +, বা U... এটি একটি সম্মিলিত বিস্ফোরণ।
রমুন

4
rbডিফল্ট মোড, উদ্ধৃতি নয়: The most commonly-used values of mode are 'r' for reading, 'w' for writing (truncating the file if it already exists), and 'a' for appending (which on some Unix systems means that all writes append to the end of the file regardless of the current seek position). If mode is omitted, it defaults to 'r' docs.python.org/2/library/functions.html#open
Iggy

158

পাইথনের সমস্ত ফাইল মোড

  • r পড়ার জন্য
  • r+ পড়ার জন্য এবং লেখার জন্য খোলে (কোনও ফাইল কেটে ফেলা যায় না)
  • w লেখার জন্য
  • w+ লেখার জন্য এবং পড়ার জন্য (কোনও ফাইল কেটে ফেলা যায়)
  • rbএকটি বাইনারি ফাইল পড়ার জন্য। ফাইল পয়েন্টারটি ফাইলের শুরুতে স্থাপন করা হয়।
  • rb+ একটি বাইনারি ফাইল পড়া বা লেখা
  • wb+ একটি বাইনারি ফাইল লিখছি
  • a+ সংযোজন জন্য খোলে
  • ab+বাইনারি এডিং এবং রিডিং উভয়ের জন্য একটি ফাইল খোলে। ফাইল উপস্থিত থাকলে ফাইলের পয়েন্টারটি ফাইলের শেষে থাকে। ফাইলটি অ্যাপেন্ড মোডে খোলে।
  • x একচেটিয়া তৈরির জন্য খুলুন, ফাইলটি ইতিমধ্যে বিদ্যমান থাকলে ব্যর্থ হয়েছে (পাইথন 3)

5
এটি সমস্ত মোড নয়। এটি উপেক্ষা করে, উদাহরণস্বরূপ, rbএবং wb, U২.x এর মোডগুলি এবং x.x এ মোডের উল্লেখ না করা t(যা উভয়ই বাদে সমস্ত কিছুর সাথে মিলিত হতে পারে b)।

1
আর + এবং ডাব্লু + এর মধ্যে পার্থক্য হ'ল ডাব্লু + যখন কোনও ফাইল খোলার সময় কেটে দেয়। তবে আপনি উভয় মোডে এটি ম্যানুয়ালি কাটতে পারেন।
মার্টিন

1
এই উত্তরটি @ 200 ঠিক আছে, যা উদাহরণস্বরূপ wb+ফাইল থেকেও পড়ে?
সেলেরিটাস

@Celeritas ডাব্লুডাব্লু নির্দেশ করে যে ফাইলটি বাইনারি মোডে লেখার জন্য খোলা হয়েছে। ইউনিক্স সিস্টেমগুলিতে (লিনাক্স, ম্যাক ওএস এক্স, ইত্যাদি) বাইনারি মোড কিছুই করে না - তারা পাঠ্য ফাইলগুলিকে একইভাবে চিকিত্সা করে যেভাবে অন্য কোনও ফাইলকে চিকিত্সা করা হয়। উইন্ডোজে, যাইহোক, পাঠ্য ফাইলগুলি সামান্য পরিবর্তিত লাইনের শেষের সাথে লেখা হয়। এক্সি বা জেপিজি ফাইলের মতো প্রকৃত বাইনারি ফাইলগুলির সাথে ডিল করার সময় এটি একটি গুরুতর সমস্যা সৃষ্টি করে। সুতরাং, এমন ফাইলগুলি খোলার সময় যা ইউনিক্সেও পাঠ্য বলে মনে করা হয় না, আপনি wb বা rb ব্যবহার করা উচিত। কেবল টেক্সট ফাইলের জন্য সাদামাটা w বা r ব্যবহার করুন।
অলোক আগরওয়াল

পাইথন 3-তে, 'এক্স' ওপেন মোডটিও রয়েছে: একচেটিয়া তৈরির জন্য উন্মুক্ত, ফাইলটি ইতিমধ্যে উপস্থিত থাকলে ব্যর্থ। ডকটিতে খোলা ফাংশন দেখুন ।
লরেন্ট LAPORTE

9

r পড়ার জন্য

w লেখার জন্য

r+ ফাইল উপস্থিত থাকলে মূল সামগ্রী মোছা না করে পড়া / লেখার জন্য অন্যথায় ব্যতিক্রম বাড়াতে হবে raise

w+ মূল বিষয়বস্তু মোছার জন্য ফাইলটি উপস্থিত থাকলে পড়ুন / লিখুন, অন্যথায় ফাইলটি তৈরি করুন

উদাহরণ স্বরূপ,

>>> with open("file1.txt", "w") as f:
...   f.write("ab\n")
... 
>>> with open("file1.txt", "w+") as f:
...   f.write("c")
... 

$ cat file1.txt 
c$
>>> with open("file2.txt", "r+") as f:
...   f.write("ab\n")
... 
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
IOError: [Errno 2] No such file or directory: 'file2.txt'

>>> with open("file2.txt", "w") as f:
...   f.write("ab\n")
... 
>>> with open("file2.txt", "r+") as f:
...   f.write("c")
... 

$ cat file2.txt 
cb
$

2

ফাইলটি কেটে গেছে, সুতরাং আপনি কল করতে পারবেনread() ('ডাব্লু' ব্যবহার করার সময় এটির বিপরীতে কোনও ব্যতিক্রম উত্থাপিত হবে না) তবে আপনি একটি খালি স্ট্রিং পাবেন।


2

আমার সন্দেহ হয় যে আপনি যা অর্জন করার চেষ্টা করছেন তা আমি পরিচালনা করার দুটি উপায় আছে।

1) যা সুস্পষ্ট, কেবল পড়ার জন্য ফাইলটি খোলার জন্য, মেমরিতে পড়ুন এবং টি দিয়ে ফাইলটি খুলুন, তারপরে আপনার পরিবর্তনগুলি লিখুন।

2) নিম্ন স্তরের ফাইল হ্যান্ডলিং রুটিন ব্যবহার করুন:

# Open file in RW , create if it doesn't exist. *Don't* pass O_TRUNC
 fd = os.open(filename, os.O_RDWR | os.O_CREAT)

আশাকরি এটা সাহায্য করবে..


তারপরে কী r+
স্মার্টমনোজ

1

আসলে, r+মোড সম্পর্কে অন্যান্য সমস্ত উত্তর সম্পর্কে কিছু ভুল আছে ।

test.in ফাইলের বিষয়বস্তু :

hello1
ok2
byebye3

এবং পাই স্ক্রিপ্ট এর:

with open("test.in", 'r+')as f:
    f.readline()
    f.write("addition")

এটি কার্যকর করুন এবং test.inএর সামগ্রীটি এতে পরিবর্তিত হবে:

hello1
ok2
byebye3
addition

তবে, আমরা যখন স্ক্রিপ্টটি এখানে পরিবর্তন করব:

with open("test.in", 'r+')as f:
    f.write("addition")

test.inএছাড়াও সাড়া:

additionk2
byebye3

সুতরাং, r+মোড আমাদের প্রথম থেকে কন্টেন্টটি কভার করার অনুমতি দেয় যদি আমরা পঠন অপারেশনটি না করি। এবং যদি আমরা কিছু রিড অপারেশন করি তবে f.write()কেবল ফাইলটিতে সংযোজন করব।

যাইহোক, আমরা যদি f.seek(0,0)আগে থাকি f.write(write_content)তবে লিখিত_ কনটেন্টগুলি তাদের পজিজন (0,0) থেকে কভার করবে।


0

H4z3 দ্বারা উল্লিখিত হিসাবে , ব্যবহারিক ব্যবহারের জন্য, কখনও কখনও আপনার ডেটা সরাসরি সমস্ত কিছু লোড করার জন্য খুব বড় হয় বা আপনার কাছে একটি জেনারেটর বা রিয়েল-টাইম ইনকামিং ডেটা থাকে তবে আপনি কোনও ফাইলে সংরক্ষণ করতে এবং পরে পড়তে ডাব্লু + ব্যবহার করতে পারেন।

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