উত্তর:
আপনি যদি জাতির শর্ত এড়াতে ফাইলটি বন্ধ এবং পুনরায় খুলতে না চান তবে আপনি truncate
এটি করতে পারেন:
f = open(filename, 'r+')
text = f.read()
text = re.sub('foobar', 'bar', text)
f.seek(0)
f.write(text)
f.truncate()
f.close()
কার্যকারিতা সম্ভবত সেখানে থাকবে পরিষ্কার এবং নিরাপদ ব্যবহার open
একটি প্রসঙ্গ ম্যানেজার, যা ফাইল হ্যান্ডলার বন্ধ হয়ে যাবে যেমন, একটি ত্রুটি দেখা দেয় এমনকি যদি!
with open(filename, 'r+') as f:
text = f.read()
text = re.sub('foobar', 'bar', text)
f.seek(0)
f.write(text)
f.truncate()
f.write(text)
আগে f.truncate()
রয়েছে; এটি text
প্রথমটি লিখেছে , সুতরাং .write()
ফাইল কার্সারের শেষে অবস্থিত হওয়ার পরে text
। ফাইলটি ছাঁটাই করার প্রক্রিয়া চালিয়ে যাওয়া এই পয়েন্টের পরে ফাইলের যা কিছু বাকী রয়েছে তা সরিয়ে ফেলবে। এই ক্ষেত্রে, শেষের ফলাফলটি একই রকম হবে যেন আপনি লেখার আগে ছেঁটে ফেলেছেন।
fileinput
মডিউলটি পছন্দসই পদ্ধতিতে পরিণত হতে পারে। পাস inplace=1
করার পরে এটি ফাইলটিকে প্রথমে অস্থায়ী স্থানে সরিয়ে নিয়ে যাবে, তারপরে পুরানো ফাইল নাম পথে নতুন ফাইলটি লিখবে। এই মুভ অপারেশনটি ইউনিক্স ফাইল সিস্টেমে দ্রুততর, কারণ এটি কেবল ফাইল সিস্টেমটিকে সরিয়ে দেয় inode
, সম্পূর্ণ সামগ্রী নয়। তারপরে মেমরি ফুলে যাওয়া এড়াতে আপনি প্রতিটি লাইনে স্বতন্ত্রভাবে পড়তে ও প্রক্রিয়া করতে পারেন। :-)
fileinput
মডিউল একটি হয়েছে inline
, অস্থায়ী ফাইল ব্যবহার ইত্যাদি মডিউল চমত্কারভাবে ফাইল তালিকায় লাইনের উপর লুপিং সাধারণ অপারেশন encapsulates ছাড়া আপনি যে ফাইলটি প্রক্রিয়া করছি পরিবর্তন লেখার জন্য মোড একটি বস্তু যা স্বচ্ছভাবে ফাইলের নাম ট্র্যাক রাখে মাধ্যমে লাইন নম্বর ইত্যাদি যদি আপনার লুপের ভিতরে সেগুলি পরীক্ষা করতে চান।
import fileinput
for line in fileinput.FileInput("file",inplace=1):
if "foobar" in line:
line=line.replace("foobar","bar")
print line
সত্যিই আপনি এই ক্লাসটি তৈরি করতে পারেন যা আমি তৈরি করি যা বেসিক ফাইল অপারেশন করে। লেখার পদ্ধতি ওভাররাইট করে এবং সংযোজন পুরানো ডেটা রাখে।
class IO:
def read(self, filename):
toRead = open(filename, "rb")
out = toRead.read()
toRead.close()
return out
def write(self, filename, data):
toWrite = open(filename, "wb")
out = toWrite.write(data)
toWrite.close()
def append(self, filename, data):
append = self.read(filename)
self.write(filename, append+data)
f.write(text)
পরে থাকা উচিতf.truncate()
?