পড়া এবং লেখার জন্য উভয়ই কীভাবে একটি ফাইল খুলবেন?


210

পড়া এবং লেখার উভয়ের জন্যই কি কোনও ফাইল খোলার উপায় আছে?

কর্মপরিকল্পনা হিসাবে, আমি লেখার জন্য ফাইলটি খুলি, এটি বন্ধ করি, তারপরে এটি আবার পড়ার জন্য খুলি। তবে পড়া বা লেখার উভয়ের জন্যই কি কোনও ফাইল খোলার উপায় আছে ?


3
আপনি কোন সমস্যার সমাধান করছেন? ফাইল লেখার / পড়ার চেয়ে আরও ভাল সমাধান হতে পারে, যেমনmmap
রোমান বোদনারুকুক

1
আপনি কি আমাদের কোডটি দিতে পারেন তাই আমরা আপনাকে উত্তর দিতে সক্ষম হব। আপনি একবার দেখার চেষ্টা করতে পারেন: ডকস.পিথন.আর. / টিউটোরিয়াল/… । তবে আমি r + b ব্যবহার করার চেষ্টা করেছি এবং এটি কাজ করে। এছাড়াও পৃথক ফাংশনে একটি ফাইল বর্ণনাকারী ব্যবহার করার কোনও সুবিধা আছে কি?
আরটিসিয়াম রুডজেনকা

@ রোমানবডনারচুক mmapএকটি দুর্দান্ত ধারণা, তবে যদি আপনার একমত হতে হবে? রিজার্ভ অ্যাক্সেস করার কোন উপায় আছে?
Dr_Zaszuś

উত্তর:


267

এখানে আপনি কীভাবে কোনও ফাইল পড়েন, এবং তারপরে এটি বন্ধ করে এবং পুনরায় খোলা ছাড়াই (কোনও বিদ্যমান ডেটা ওভাররাইট করা) লিখুন:

with open(filename, "r+") as f:
    data = f.read()
    f.seek(0)
    f.write(output)
    f.truncate()

41
ব্যবহার a+কভার শেষ ক্ষেত্রে যে ফাইল উপস্থিত না থাকলে (তৈরি করা হবে)
Jossef Harush

16
অনুসন্ধান () এবং ছাঁটাই () উভয়ই সমালোচনামূলক!
smwikedia

4
@ জোসেফহুরুশ নোট করুন যে a'কিছু ইউনিক্স সিস্টেমে রাষ্ট্রের ডকুমেন্টেশনের অর্থ হ'ল বর্তমান লেখার অবস্থান নির্বিশেষে সমস্ত ফাইল লেখার শেষে যুক্ত হয়' end এক্ষেত্রে f.seek(0)প্রত্যাশার মতো কাজ করবে না। আমি লিনাক্সে এটিকে খারাপ বলেছি।
গ্রিম

6
আপনি কেন এখানে seekএবং truncateব্যবহৃত হয় তা ব্যাখ্যা করা ভাল । বেশিরভাগ পাঠকই গুগল থেকে এসে কপি-পেস্ট করেন।
শিপলু মোকাদ্দিম

7
আপনি ফাইলটি পড়ার পরে ফাইল পয়েন্টার (এফপি) এগিয়ে গেছে, সুতরাং আপনাকে এটি শুরুতে সেট করা দরকার। এটি এটি seek(0)করে: এটি এফপি স্থাপন করে অবস্থান 0( অর্থাৎ শুরু) beginning truncate()প্রদত্ত সংখ্যক বাইটে ফাইলটি কেটে ফেলুন, অর্থাত্ নির্দিষ্ট পরিমাণ বাইটের পরে ফাইলের সমস্ত সামগ্রী সরিয়ে দেয়। আপনার ফাইলটির স্ট্রিং রয়েছে Hello, worldএবং আপনি লিখুন তা কল্পনা করুন Bye। আপনি যদি truncate()সামগ্রীটি শেষ না করেন তবে তা হ'ল Byelo, world, যেহেতু আপনি ফাইলটিতে থাকা পাঠ্যটি কখনও মুছলেন না। truncate()বর্তমান এফপিতে ফাইল কেটে দেয়।
ইলিয়া গেরাসিমচুক

48

r+একই সাথে পড়া এবং লেখার জন্য প্রচলিত মোড। এটি fopen()সিস্টেম কলটি ব্যবহার করা থেকে আলাদা নয় কারণ file()/ open()এই অপারেটিং সিস্টেম কলটির চারপাশে কেবল একটি ছোট্ট মোড়ক।


এটি ফাইলের বিষয়বস্তু সংযোজন করে, শুরু থেকে লেখা হয় না
টমসওয়ায়ার

47

আই / ও আচরণগুলি সংক্ষিপ্ত করুন

|          Mode          |  r   |  r+  |  w   |  w+  |  a   |  a+  |
| :--------------------: | :--: | :--: | :--: | :--: | :--: | :--: |
|          Read          |  +   |  +   |      |  +   |      |  +   |
|         Write          |      |  +   |  +   |  +   |  +   |  +   |
|         Create         |      |      |  +   |  +   |  +   |  +   |
|         Cover          |      |      |  +   |  +   |      |      |
| Point in the beginning |  +   |  +   |  +   |  +   |      |      |
|    Point in the end    |      |      |      |      |  +   |  +   |

এবং সিদ্ধান্ত শাখা

এখানে চিত্র বর্ণনা লিখুন


গাছের ডায়াগ্রামটি তৈরি করতে আপনি কোন সফটওয়্যার ব্যবহার করেছেন?
ফ্লাক্স

আমিও আগ্রহী হব - দিয়া?
নারডোক

22

আমি এরকম কিছু চেষ্টা করেছি এবং এটি প্রত্যাশার মতো কাজ করে:

f = open("c:\\log.log", 'r+b')
f.write("\x5F\x9D\x3E")
f.read(100)
f.close()

কোথায়:

f.read (আকার) - কোনও ফাইলের বিষয়বস্তু পড়তে f.read (আকার) কল করুন, যা কিছু পরিমাণে ডেটা পড়ে এবং স্ট্রিং হিসাবে ফেরত দেয়।

এবং:

এফ। রাইটিং (স্ট্রিং) ফাইলটিতে স্ট্রিংয়ের বিষয়বস্তু লিখেছে, কিছুই না ফেরায়।

এছাড়াও আপনি ফাইল পড়ার এবং লেখার বিষয়ে পাইথন টিউটোরিয়ালটি খুললে আপনি এটি দেখতে পাবেন:

'r +' ফাইল পড়া এবং লেখার জন্য উভয়ই খোলে।

উইন্ডোজে, মোডে সংযুক্ত 'বি' ফাইলটি বাইনারি মোডে খোলে, সুতরাং 'আরবি', 'ডাব্লুবি', এবং 'আর + বি' এর মতো মোডগুলিও রয়েছে।


5
এছাড়াও পড়ার পরে রাইটিং 'আর + বি' মোড ব্যবহার করে সমানভাবে কাজ করে তবে ফাইলের শুরুতে কার্সারটি ফিরিয়ে রাখতে আপনার f.read () এবং f.writ () এর মধ্যে f.seek (0) ব্যবহার করতে হবে।
চমত্কার

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