ফাইল সামগ্রীগুলির মধ্যে স্ট্রিং প্রতিস্থাপন করুন


100

আমি কীভাবে একটি ফাইল, স্টাড। টেক্সট খুলতে পারি এবং তারপরে "এ" এর যে কোনও উপস্থিতি "কমলা" দিয়ে প্রতিস্থাপন করব?


4
দয়া করে (সর্বদা হিসাবে) সাধারণ প্রশ্নের গাইডলাইন অনুসরণ করুন , কোনও বিশেষ বিধিনিষেধ বিবরণ করুন, আপনি এখন পর্যন্ত কী চেষ্টা করেছেন তা দেখান, এবং আপনাকে বিশেষত কী বিভ্রান্ত করছে তা সম্পর্কে জিজ্ঞাসা করুন।

21
আপনার হোমওয়ার্কটি [হোমওয়ার্ক] ট্যাগ দিয়ে চিহ্নিত করুন mark
এসলট

উত্তর:


183
with open("Stud.txt", "rt") as fin:
    with open("out.txt", "wt") as fout:
        for line in fin:
            fout.write(line.replace('A', 'Orange'))

8
পাঠ্য মোডের জন্য "টি" কেবল পাইথন 3। এছাড়াও, আপনি আপনার আউটপুট ফাইলের জন্য একটি প্রসঙ্গ পরিচালক সরবরাহ করেন তবে আপনার ইনপুট ফাইলটি বন্ধ করতে ব্যর্থ হন যা অসঙ্গত বলে মনে হয়।
স্টিভেন রাম্বালস্কি

4
@ কেটরিএল্লেক্স: কোনও ডাউনভোট নেই, আমি কেবল উঁচুতে যাইনি। তবে বাড়ির
কাজকর্মের

আহ, খেয়াল করেননি এটি "হোমওয়ার্ক" দিয়ে ট্যাগ করা ছিল। আমি আমার উত্তরটি মুছব না তবে ভবিষ্যতে আরও সতর্ক থাকব
গ্যারেথ ডেভিডসন

23
"হোমওয়ার্কের সমস্যার জবাব দেওয়া" অত্যন্ত মূর্খ মন্তব্য। যদি কেউ সাহায্য চান তবে তাদের সহায়তা করুন। প্রত্যেকেই তাদের এইচডব্লিউটি করতে
চাইছে

6
হোমওয়ার্কের জন্য আমার এটির দরকার ছিল এবং এটি আমাকে
প্রচুরভাবে

81

আপনি যদি একই ফাইলে স্ট্রিংগুলি প্রতিস্থাপন করতে চান তবে আপনাকে সম্ভবত এটির বিষয়বস্তু স্থানীয় ভেরিয়েবলের মধ্যে পড়তে হবে, এটি বন্ধ করতে হবে এবং লেখার জন্য এটি আবার খুলতে হবে:

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

def inplace_change(filename, old_string, new_string):
    # Safely read the input filename using 'with'
    with open(filename) as f:
        s = f.read()
        if old_string not in s:
            print('"{old_string}" not found in {filename}.'.format(**locals()))
            return

    # Safely write the changed content, if found in the file
    with open(filename, 'w') as f:
        print('Changing "{old_string}" to "{new_string}" in {filename}'.format(**locals()))
        s = s.replace(old_string, new_string)
        f.write(s)

এটি উল্লেখ করার মতো যে যদি ফাইলের নামগুলি আলাদা হত তবে আমরা একটি withবিবৃতি দিয়ে আরও মার্জিতভাবে এটি করতে পারতাম ।


4
এই সমাধানটি আরও ভাল কারণ আপনি উপরের উত্তরের পরিবর্তে ফাইলটির নাম পরিবর্তন করেন না।

52
#!/usr/bin/python

with open(FileName) as f:
    newText=f.read().replace('A', 'Orange')

with open(FileName, "w") as f:
    f.write(newText)

4
সংক্ষিপ্ত এবং সংক্ষিপ্ত, সেরা উত্তর আইএমও
Biford Wylie

11

কিছুটা এইরকম

file = open('Stud.txt')
contents = file.read()
replaced_contents = contents.replace('A', 'Orange')

<do stuff with the result>

ওপি "কোনও সংঘটন" মানে এইটিকে বোঝায়, এমনকি এটি একটি সাবস্ট্রিং হলেও - এটি আপনার উদাহরণের জন্য কার্যকর হবে না।
দুর্দু

7
with open('Stud.txt','r') as f:
    newlines = []
    for line in f.readlines():
        newlines.append(line.replace('A', 'Orange'))
with open('Stud.txt', 'w') as f:
    for line in newlines:
        f.write(line)

6

আপনি লিনাক্স উপর এবং মাত্র শব্দ প্রতিস্থাপন করতে চান dogসঙ্গে catআপনি কি করতে পারেন:

পাঠ্য টেক্সট:

Hi, i am a dog and dog's are awesome, i love dogs! dog dog dogs!

লিনাক্স কমান্ড:

sed -i 's/dog/cat/g' test.txt

আউটপুট:

Hi, i am a cat and cat's are awesome, i love cats! cat cat cats!

আসল পোস্ট: /ubuntu/20414/find-and-replace-text-within-a-file- using-commands


2

পাথলিব ব্যবহার ( https://docs.python.org/3/library/pathlib.html )

from pathlib import Path
file = Path('Stud.txt')
file.write_text(file.read_text().replace('A', 'Orange'))

ইনপুট এবং আউটপুট ফাইলগুলি পৃথক হলে আপনি read_textএবং এর জন্য দুটি পৃথক ভেরিয়েবল ব্যবহার করবেন write_text

আপনি যদি একটি একক প্রতিস্থাপনের চেয়ে আরও জটিল পরিবর্তন চান, আপনি তার ফলাফলটি read_textএকটি ভেরিয়েবলের জন্য বরাদ্দ করে , এটি প্রক্রিয়া করে এবং নতুন সামগ্রীটি অন্য ভেরিয়েবলে সংরক্ষণ করে এবং তারপরে নতুন সামগ্রীটি সংরক্ষণ করে write_text

যদি আপনার ফাইলটি বড় ছিল তবে আপনি এমন একটি পদ্ধতির পছন্দ করবেন যা পুরো ফাইলটিকে মেমরির মধ্যে না পড়ে, বরং গ্যার্থ ডেভিডসনের অন্য উত্তরে শো হিসাবে এটি লাইন ধরে প্রক্রিয়াকরণ করুন ( https://stackoverflow.com/a/4128192/3981273 ) , যা অবশ্যই ইনপুট এবং আউটপুট জন্য দুটি স্বতন্ত্র ফাইল ব্যবহার করা প্রয়োজন।


write_text আমার জন্য কাজ করছে না। এটি ফাইলটি আপডেট করছে না
অনুরাগ

0

সবচেয়ে সহজ উপায় হ'ল নিয়মিত ভাবের সাথে এটি করা, ধরে নেওয়া যে আপনি যে ফাইলটি করছেন সেখানে প্রতিটি লাইন (যেখানে 'এ' সংরক্ষণ করা হবে) এর উপরে পুনরাবৃত্তি করতে চান ...

import re

input = file('C:\full_path\Stud.txt), 'r')
#when you try and write to a file with write permissions, it clears the file and writes only #what you tell it to the file.  So we have to save the file first.

saved_input
for eachLine in input:
    saved_input.append(eachLine)

#now we change entries with 'A' to 'Orange'
for i in range(0, len(old):
    search = re.sub('A', 'Orange', saved_input[i])
    if search is not None:
        saved_input[i] = search
#now we open the file in write mode (clearing it) and writing saved_input back to it
input = file('C:\full_path\Stud.txt), 'w')
for each in saved_input:
    input.write(each)
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.