অনেকগুলি এক্সএমএল ফাইলে <মান> ডেটা প্রতিস্থাপন করুন


0

একটি নির্দিষ্ট কাঠামো সহ আমার কাছে প্রচুর এক্সএমএল ফাইল রয়েছে, উদাহরণস্বরূপ

<Class="Object">
    <Speed>25</Name>
    <Price>3</Price>

আমি নির্দিষ্ট ক্ষেত্রগুলি থেকে মানগুলি প্রতিস্থাপন করতে চাই। আমি এটি ম্যানুয়ালি করতে পারি তবে এতে অনেক সময় লাগবে।

উদাহরণস্বরূপ: সমস্ত ফাইলগুলিতে আমার গতি 100 এবং দাম 50 করতে হবে।

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

আগাম ধন্যবাদ!



আপনি কি নির্দিষ্ট স্ট্রিংগুলি দিয়ে নিয়মিত প্রকাশ করতে চান? আমি ধরে নিলাম যে এটির <Speed>25</Speed>এই স্ট্রিংটি পরিবর্তন করতে হবে <Speed>100</Speed>, তারপরে নোটপ্যাড ++, ফাইলগুলিতে ফাইন্ড খুলতে Ctrl-Shift + F খুলুন। আপনি কেবল ফাইলগুলির ডিরেক্টরি চয়ন করতে পারেন। কীটি রয়েছে তা <Speed>25</Speed>প্রতিস্থাপন <Speed>100</Speed>করুন, তারপরে "ফাইলগুলি প্রতিস্থাপন করুন" এ ক্লিক করুন " তারপরে আপনি অন্য স্ট্রিংয়ের জন্যও একই কাজ করতে পারেন।
হেল্পিংহ্যান্ড

ডেভিডপস্টিল, এখানে প্রচুর পরিমাণে প্রযুক্তিগত তথ্য রয়েছে এবং এটি আমার প্রশ্নের সাথে সম্পর্কিত নয়। হেল্পিংহ্যান্ড, জিনিসটি হ'ল মান সব সময় আলাদা। একটি ফাইলের গতি 25 এর অন্যটিতে এটি 30 ইত্যাদি হয় তাই আপনার পরামর্শ অনুসারে আমি তা করতে পারি না।
মাইক

আসলেই <Speed>25</Name>নাকি <Speed>25</Speed>?
টোটো

উত্তর:


0

আপনি এই উদ্দেশ্যে পাইথন 3.x চেষ্টা করতে পারেন। পাইথনটি অনেকগুলি প্ল্যাটফর্মে উপলভ্য হিসাবে ব্যবহার করেছিলাম। আমি উইন্ডোজ এবং উবুন্টুতে এই স্ক্রিপ্টটি পরীক্ষা করেছি। আমি কোন সমস্যা পর্যবেক্ষণ করি নি। এই স্নিপেটটি কেবল গতির মানগুলিকেই পরিবর্তন করে তবে পরিবর্তনশীল_র পরিবর্তনের জন্য নির্দ্বিধায় দ্বিধা বোধ করে যাতে আপনার প্রয়োজনীয় যা কিছু পরিবর্তন হয়।

import os
import re
my_dir = 'C:\\temp2\\my_folder\\'
replace_what = '(?<=<Speed>)(\d+)(?=<)'
replace_with = '100'
# loop through all files in directory
for fn in os.listdir(my_dir):
    #print(fn)
    pathfn = os.path.join(my_dir,fn)
    if os.path.isfile(pathfn):
        file = open(pathfn, 'r+')
        new_file_content=''
        for line in file:
            p = re.compile(replace_what)
            new_file_content += p.sub(replace_with, line)
        file.seek(0)
        file.truncate()
        file.write(new_file_content)
        file.close()

ধন্যবাদ! আমি এটি পরীক্ষা করেছি এবং ঠিক আছে। আপনি এটি পরিবর্তন করতে পারেন তাই এটি সমস্ত উপ-ডিরেক্টরিতেও অনুসন্ধান করে? আমি ঠিক বুঝতে পেরেছিলাম যে আমার ফাইলগুলি উপ-ডিরেক্টরিতে রয়েছে তা বলতে ভুলে গিয়েছি। সুতরাং উদাহরণস্বরূপ আমার কাছে / আমার ফোল্ডার / কার 1 ... / কার 2 / কার 3 এবং আরও রয়েছে।
মাইক

0

স্ক্রিপ্টটির পুনরাবৃত্ত সংস্করণ এখানে। এটি প্রদত্ত ডিরেক্টরি এবং এর সমস্ত উপ-ডিরেক্টরিতে ফাইলের মানগুলিকে পরিবর্তন করে।

import os
import re
my_dir = 'C:\\temp2\\my_folder\\'
replace_what = '(?<=<Speed>)(\d+)(?=<)'
replace_with = '100'
# loop through all files in directory recursively
for root, directories, filenames in os.walk(my_dir):
    for filename in filenames:
        if os.path.isfile(os.path.join(root,filename)):
            file = open(os.path.join(root,filename), 'r+')
            new_file_content=''
            for line in file:
                p = re.compile(replace_what)
                new_file_content += p.sub(replace_with, line)
            file.seek(0)
            file.truncate()
            file.write(new_file_content)
            file.close()

0

আমি ধরে নিলাম আপনার উদাহরণে একটি টাইপো আছে এবং আপনার আছে <Speed>25</Speed>

  • Ctrl+ +F
  • কি সন্ধান করুন: (?<=<Speed>)\d+(?=</Speed>)
  • প্রতিস্থাপন: 100
  • চারপাশে মোড়ানো চেক করুন
  • নিয়মিত অভিব্যক্তি পরীক্ষা করুন
  • Replace all

ব্যাখ্যা:

(?<=<Speed>)    : lookbehind, zero-length assertion to make sure we have "<Speed>" before current position
\d+             : 1 or more digits
(?=</Speed>)    : lookahead, zero-length assertion to make sure we have "</Speed>" after current position

প্রতিস্থাপন:

100 : the new speed value

দামের জন্য একই করুন, কেবল উপরের নির্দেশাবলীর Speedসাথে প্রতিস্থাপন করুন Price

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