পাইথনে টেক্সট ফাইলের ফাইল সামগ্রীগুলি কীভাবে মুছবেন?


140

আমার কাছে টেক্সট ফাইল রয়েছে যা আমি পাইথনে মুছতে চাই। আমি কেমন করে ঐটি করি?


যে উত্তরগুলি উত্তর দিয়েছে তারা বলেছে যে এটি সম্ভব নয় .. সুতরাং কীভাবে আপনি অজগরে এটি সহজেই করবেন তা আপনি আমাকে বলতে চান?
হিক 21

উত্তর:


279

অজগরে:

open('file.txt', 'w').close()

অথবা বিকল্প হিসাবে, যদি আপনার ইতিমধ্যে একটি খোলা ফাইল থাকে:

f = open('file.txt', 'r+')
f.truncate(0) # need '0' when using r+

সি ++ তে আপনি অনুরূপ কিছু ব্যবহার করতে পারেন।


#include<fstream>এবং তারপরে std::ofstream("file.txt");পাইথনের মতোই ছোট। :)
উইলহেমটেল

8
এটি (সি ++ এবং পাইথন উভয় ক্ষেত্রেই) কাজ করার কারণ হ'ল ডিফল্টরূপে আপনি যখন লেখার জন্য কোনও ফাইল খোলেন, এটি বিদ্যমান সামগ্রীগুলি ছাঁটাই করে। সুতরাং সত্যই এটি একটি পার্শ্ব প্রতিক্রিয়া বাছাই, এবং এইভাবে আমি স্পষ্ট কলকে কাঙ্ক্ষিত করতে () অপ্রয়োজনীয় হওয়া সত্ত্বেও পরিষ্কার করতে চাই।
rmeador

7
আপনি যদি "r +" ব্যবহার করে ফাইলটি খোলেন, আপনার যদি বিশ্লেষণযোগ্য ফাইল থাকে তবে ট্রান্সকেট (0) ব্যবহার করুন। এটি সম্পূর্ণ করতে উপরের উত্তরে এটি যুক্ত করুন!
জোহান এনগ্ললম

3
ফাইলটির শুরুতে পয়েন্টারটি সরানোর জন্য f.seek (0) ব্যবহার করুন
জোহান এনগ্ললম

আমি ফাইল পড়ার পাশাপাশি লিখছিলাম। উত্তরটি ফাইলটি পুরোপুরি ছাঁটাই করে, তবে সাবধান থাকুন যদি আপনি এটিতে আবার কিছু লিখতে চান তবে f.seek(0)পরে যুক্ত করতে ভুলবেন না তবে f.truncate(0)অন্যথায় আপনার ফাইলটির শুরুতে অদ্ভুত \ x00 সংযুক্ত হবে।
কৃষ্ণ চৈতন্য

29

অনড্রের উত্তরের কোনও এক্সটেনশনের সম্পূর্ণ উত্তর নয়

truncate()(আমার পছন্দসই পদ্ধতি) ব্যবহার করার সময় আপনার কার্সার প্রয়োজনীয় অবস্থানে রয়েছে তা নিশ্চিত করুন। যখন কোনও নতুন ফাইল পড়ার জন্য খোলা হয় - open('FILE_NAME','r')এটির কার্সারটি ডিফল্টরূপে 0 এ থাকে। তবে আপনি যদি নিজের কোডটির মধ্যে ফাইলটি বিশ্লেষণ করে থাকেন তবে অবশ্যই ফাইলটির শুরুতে আবার নির্দেশ করতে ভুলবেন না অর্থাৎ truncate(0) ডিফল্টরূপে truncate()বর্তমান কার্সার অবস্থান থেকে শুরু হওয়া কোনও ফাইলের বিষয়বস্তু ছাঁটাই করা হয়।

একটি সহজ উদাহরণ


21

"লিখন" মোডে একটি ফাইল খুললে তা সাফ হয়ে যায়, আপনাকে বিশেষভাবে এটি লিখতে হবে না:

open("filename", "w").close()

(ফাইলটি স্বয়ংক্রিয়ভাবে বন্ধ হয়ে যাওয়ার সময়টির সময় হিসাবে আপনি এটি বন্ধ করা উচিত বাস্তবায়ন নির্দিষ্ট হতে পারে)


10

ব্যবহারকারী @ জামিলাক থেকে একটি বিকল্প রূপ open("filename","w").close()হ'ল

with open('filename.txt','w'): pass

8

ব্যবহার করার সময় with open("myfile.txt", "r+") as my_file:, আমি অদ্ভুত শূন্যগুলি পাই myfile.txt, বিশেষত যেহেতু আমি প্রথমে ফাইলটি পড়ছি। এটি কাজ করার জন্য, আমাকে প্রথমে my_fileফাইলটির শুরুতে পয়েন্টারটি পরিবর্তন করতে হয়েছিল my_file.seek(0)। তারপরে আমি my_file.truncate()ফাইলটি সাফ করতে পারি ।


1
এটি অবাক হওয়ার মতোই হওয়া উচিত, এটি 3 বছর আগে এই উত্তরে উল্লেখ করা হয়েছিল।
এএমসি

6

আপনাকে ফাইলটি ওভাররাইট করতে হবে। সি ++ এ:

#include <fstream>

std::ofstream("test.txt", std::ios::out).close();

1
close()কল করার দরকার নেই । ডেস্ট্রাক্টর ফাইলটি বন্ধ করে দেবে। সুতরাং আপনার কেবলমাত্র একটি অস্থায়ী তৈরি করতে হবে:ofstream("test.txt");
উইলহেমটেল

এই উত্তরটির পরে এই প্রশ্নটি পরিবর্তিত হয়েছে। প্রশ্নটির নতুন দিকটি দিয়ে প্রশ্ন মুছে ফেলতে পারেন?
Seanny123

1

আপনার প্রোগ্রামের ভিতরে ফাইল পয়েন্টারটি নালায় অর্পণ করা কেবল ফাইলের সেই রেফারেন্স থেকে মুক্তি পাবে। ফাইল এখনও আছে। আমি মনে করি remove()সি এর stdio.hকাজটি আপনি সেখানে সন্ধান করছেন for পাইথন সম্পর্কে নিশ্চিত নয়।


2
বিটিডাব্লু, সরান () এবং আনলিংক () উভয়ই একটি নিয়মিত ফাইলের রেফারেন্স গণনা হ্রাস করবে, আসলে এটি মুছবে না। রেফারেন্স গণনা শূন্যে নেমে গেলে ফাইলটি মুছে ফেলা হবে। উদাহরণস্বরূপ, যদি আপনার প্রক্রিয়াটিতে ফাইলটি খোলা থাকে এবং আপনি এটিতে আনলিংক () বা () অপসারণ করেন তবে ফাইলটি () ডি না হওয়া পর্যন্ত এটি মুছে ফেলা হবে না (যেমন রেফ গণনা শূন্যে নেমে যায় - এটি অন্য কোনও প্রক্রিয়াও ধরে নেয় না ফাইলটি খোলা আছে)। এই আচরণটি দরকারী, উদাহরণস্বরূপ, অস্থায়ী ফাইলগুলি অস্বাভাবিক প্রক্রিয়া সমাপ্তির পরে যেমন উদার (যেমন খুলুন), আনলিঙ্ক (), আইও, ক্র্যাশ , বন্ধ () বলা হয় না) সম্পাদন করে ensure
অকার্যকর

1

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

ধরুন, উদাহরণস্বরূপ, আপনি যে ফাইলটি মুছে ফেলছেন তাতে প্রোডাকশন পাসওয়ার্ড রয়েছে এবং উপস্থিত অপারেশনটি সম্পূর্ণ হওয়ার সাথে সাথেই মুছতে হবে।

ফাইলটি একবার ব্যবহার শেষ করে জিরো-ফিলিং করা সংবেদনশীল তথ্য নষ্ট হওয়ার বিষয়টি নিশ্চিত করতে সহায়তা করে।

সাম্প্রতিক প্রকল্পে আমরা নিম্নলিখিত কোডগুলি ব্যবহার করেছি, যা ক্ষুদ্র পাঠ্য ফাইলগুলির জন্য ভাল কাজ করে। এটি শূন্যরেখাগুলির সাথে বিদ্যমান সামগ্রীগুলি ওভাররাইট করে।

import os

def destroy_password_file(password_filename):
    with open(password_filename) as password_file:
        text = password_file.read()
    lentext = len(text)
    zero_fill_line_length = 40
    zero_fill = ['0' * zero_fill_line_length
                      for _
                      in range(lentext // zero_fill_line_length + 1)]
    zero_fill = os.linesep.join(zero_fill)
    with open(password_filename, 'w') as password_file:
        password_file.write(zero_fill)

নোট করুন যে শূন্য-পূরণ আপনার সুরক্ষার গ্যারান্টি দেবে না। আপনি যদি সত্যিই উদ্বিগ্ন হন তবে আপনার ড্রাইভে থাকা 'খালি' জায়গাটি মুছতে মুছতে আপনি ফাইল শ্রেডার বা সিসিলিয়েনারের মতো বিশেষজ্ঞ ইউটিলিটি শূন্য-পূরণ এবং ব্যবহার করার পক্ষে সেরা ।


0

আপনার শেষটি মুছে ফেলার প্রয়োজন না হলে আপনি জায়গা থেকে কোনও ফাইল থেকে "মুছতে" পারবেন না। হয় একটি "খালি" মানের ওভাররাইট সহ সামগ্রী থাকুন, বা আপনার যে ফাইলটি যত্নশীল সেগুলির অংশগুলি পড়ুন এবং এটি অন্য কোনও ফাইলে লিখুন।


ঠিক আছে কীভাবে আবর্জনার মান না দিয়ে ওভাররাইট করবেন? আমার মানে ধরুন 9 এর স্ট্রিং দৈর্ঘ্য সেখানে আছে এবং আমি এটিকে 6 টির দৈর্ঘ্যের সাথে ওভাররাইট করছি। তার মানে 3 টি আবর্জনা মান হবে?
হিক 21

সঠিক। এছাড়াও আপনার যে কোনও পাঠকের কাছে এই তিনটি অক্ষর আবর্জনা তা চিহ্নিত করার কিছু উপায় থাকতে হবে।
Ignacio Vazquez-Abram 21

আমার কোডটি পাইথন এবং সি ++ এর মধ্যে বিস্তৃত। সুতরাং যদি কোনও ফাইল পঠন সি ++ এ করা হয় এবং অজগরে ফাইল লেখেন .. ফাইলটি মুছতে হবে উভয় সময় ..
হিক

0

যেহেতু পাঠ্য ফাইলগুলি ক্রমযুক্ত, আপনি সেগুলির সরাসরি ডেটা মুছতে পারবেন না। আপনার বিকল্পগুলি হ'ল:

  • সর্বাধিক সাধারণ উপায় হল একটি নতুন ফাইল তৈরি করা। আসল ফাইলটি পড়ুন এবং আপনি যে অংশটি মুছতে চান তার অংশটি বাদ দিয়ে নতুন ফাইলে সবকিছু লিখুন। সমস্ত ফাইল লেখা হয়ে গেলে, পুরানো ফাইলটি মুছুন এবং নতুন ফাইলটির নতুন নাম দিন যাতে এটির আসল নাম থাকে।
  • আপনি যে বিন্দুটি পরবর্তী দিকে পরিবর্তন করতে চান তা থেকে আপনি পুরো ফাইলটি ছাঁটাই এবং পুনরায় লিখতে পারেন। আপনি পরিবর্তন করতে চান তা নির্দেশ করুন এবং বাকী ফাইলটি মেমোরিতে পড়ুন। একই বিন্দুতে ফিরে সন্ধান করুন, ফাইলটি কেটে ফেলুন, এবং আপনি যে অংশটি মুছতে চান সেগুলি ছাড়া সামগ্রীগুলি আবার লিখুন।
  • আরেকটি সহজ বিকল্প হ'ল একই দৈর্ঘ্যের অন্য ডেটা সহ ডেটা ওভাররাইট করা। তার জন্য, সঠিক অবস্থানটি অনুসন্ধান করুন এবং নতুন ডেটা লিখুন। সীমাবদ্ধতা হ'ল এটির অবশ্যই একই দৈর্ঘ্য থাকতে হবে।

উপরের যে কোনও ধারণা বাস্তবায়নের জন্য seek/ truncateফাংশন / পদ্ধতিটি দেখুন। পাইথন এবং সি উভয়েরই এই ফাংশনগুলি রয়েছে।


আমি কেবল শুরু থেকে পুরো ফাইলটি মুছতে চাই
হিক

2
তারপরে কেবল ফাইলটি সরান। পাইথন os.removeবা os.unlinkসিটিতে ব্যবহার করুন বা unlinkঅন্য একটি বিকল্প হ'ল কেবল লেখার বা ব্যবহারের জন্য ফাইলটি পুনরায় খোলা truncate
নসক্লো

0

ফাইল লিখিত এবং লিখন পড়া

def writeTempFile(text = ''):
    filePath = "/temp/file1.txt"
    if not text:                      # If blank return file content
        f = open(filePath, "r")
        slug = f.read()
        return slug
    else:
        f = open(filePath, "a") # Create a blank file
        f.seek(0)  # sets  point at the beginning of the file
        f.truncate()  # Clear previous content
        f.write(text) # Write file
        f.close() # Close file
        return text

এটা আমার জন্য কাজ করেছে


0

আপনি এটি ব্যবহার করতে পারেন (উপরের কয়েকটি উত্তরের উপর ভিত্তি করে):

file = open('filename.txt', 'w')
file.write('')
file.close

অবশ্যই এটি একটি ফাইল সাফ করার জন্য খুব খারাপ উপায় কারণ এটির জন্য অনেকগুলি কোডের লাইন প্রয়োজন, তবে আমি কেবল এটি আপনাকে এই পদ্ধতিতেও করা যেতে পারে তা দেখানোর জন্য এটি লিখেছিলাম।

শুভ কোডিং!

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