পাইথন ফর্ম্যাট স্ট্রিংতে% s এর অর্থ কী?


166

%sপাইথন মানে কী ? এবং নিম্নলিখিত বিট কোডটি কী করে?

এই ক্ষেত্রে...

 if len(sys.argv) < 2:
     sys.exit('Usage: %s database-name' % sys.argv[0])

 if not os.path.exists(sys.argv[1]):
     sys.exit('ERROR: Database %s was not found!' % sys.argv[1])

4
%অপারেটর আরো শক্তিশালী পক্ষে অবচিত str.formatপদ্ধতি, দেখতে PEP-3101
পাওলো স্কার্ডাইন

35
পিইপি আসলে বলে যে "পাইথন 3.0 এ,% অপারেটর আরও শক্তিশালী স্ট্রিং ফর্ম্যাটিং পদ্ধতি দ্বারা পরিপূরক" এবং এটি পাইথন ২. back এ ব্যাকপোর্ট করা হয়। আমি যেখানে "পরিপূরক" থেকে এসেছি তার অর্থ প্রতিস্থাপন নয় to পিইপি "অনুপ্রবেশ" বলে না এবং পিইপির কোনও অংশে এটি% অপারেটরকে অবমূল্যায়ন করা হয়নি বলে মন্তব্য করে (তবুও এটি অন্যান্য জিনিসগুলি নীচে নীচে অবহিত করা হয় বলে বলে)। আপনি স্ট্রিং ফর্ম্যাট পছন্দ করতে পারেন এবং এটি ঠিক আছে, তবে একটি পিইপি না বলা পর্যন্ত এটি অবমূল্যায়ন না করা পর্যন্ত এটি দাবি করার কোনও বুদ্ধি নেই it
বেন

উত্তর:


198

এটি একটি স্ট্রিং ফর্ম্যাটিং সিনট্যাক্স (এটি এটি সি থেকে ধার করে)।

দয়া করে "পাইফর্ম্যাট" দেখুন :

পাইথন স্ট্রিংগুলিতে ফর্ম্যাট করা মানগুলিকে সমর্থন করে। যদিও এটি খুব জটিল অভিব্যক্তিগুলি অন্তর্ভুক্ত করতে পারে তবে সর্বাধিক প্রাথমিক ব্যবহার হ'ল %sস্থানধারক সহ একটি স্ট্রিংয়ে মান সন্নিবেশ করানো।

সম্পাদনা করুন: এখানে একটি খুব সহজ উদাহরণ:

#Python2
name = raw_input("who are you? ")
print "hello %s" % (name,)

#Python3+
name = input("who are you? ")
print("hello %s" % (name,))

%sটোকেন আমাকে সন্নিবেশ করতে (এবং সম্ভাব্য বিন্যাস) একটি স্ট্রিং পারেন। লক্ষ্য করুন যে %sটোকেনটি %চিহ্নটির পরে স্ট্রিংয়ে যা যা তা দ্বারা প্রতিস্থাপিত হয়েছে । একটি নীতিতে একাধিক স্ট্রিং sertedোকানো এবং ফর্ম্যাট করা যায় তা বোঝাতে আমি এখানেও একটি টিউপল ব্যবহার করছি (যখন আপনার কেবল একটি টিউপল ব্যবহার করে একটি স্ট্রিং alচ্ছিক)।


11
নোট করুন যে এই ধরণের স্ট্রিং ইন্টারপোলেশন আরও শক্তিশালী str.formatপদ্ধতির পক্ষে অবনতিযুক্ত ।
পাওলো স্কার্ডাইন

6
পাইথন 3-এ কাঁচা-ইনপুট () এখন আপনারা যারা নিজের জন্য চেষ্টা করছেন তাদের জন্য কেবল ইনপুট ()।
গোথবার্জ

1
কেন (name,), এবং শুধু না name?
ক্যামেরন হাডসন

111

অ্যান্ড্রু এর উত্তর ভাল।

এবং আপনাকে আরও কিছুটা সাহায্য করতে, আপনি কীভাবে এক স্ট্রিংয়ে একাধিক বিন্যাস ব্যবহার করেন তা এখানে

"Hello %s, my name is %s" % ('john', 'mike') # Hello john, my name is mike".

আপনি যদি স্ট্রিংয়ের পরিবর্তে ইনট ব্যবহার করছেন তবে% s এর পরিবর্তে% d ব্যবহার করুন।

"My name is %s and i'm %d" % ('john', 12) #My name is john and i'm 12

2
সুন্দর। % d আপনাকে str (int) strালাই থেকে বাঁচায়। কোন ধারণা% s এবং% d এর জন্য কী দাঁড়ায়? আমার ধারণা আমি সেগুলি স্ট্রিং এবং অঙ্ক হিসাবে স্মরণ করব।
ব্যবহারকারী 39131339

1
@ ইউজার 391313 ডেসিমাল জন্য দাঁড়িয়েছে :) তারা সকলেই এখানে ডকস.পিথথন.আর
২ /

আমি পূর্ববর্তী সংস্করণগুলির জন্য জানি না, তবে কমপক্ষে 3.6 এর জন্য এটি একইরকম কাজ করে এমনকি আপনি যদি %sপূর্ণসংখ্যার উপর ব্যবহার করেন তবে এটি কেবল একটি স্ট্রিংয়ে রূপান্তরিত হবে।
ল্যাপিন

@ ল্যাপিন আপনি সঠিক আছেন :) তবে এটি সর্বদা আপনি যা চান তা নাও হতে পারে। বলুন আপনি উদাহরণস্বরূপ একটি প্যাড করতে চান। print('This number will be padded with 4 zeros: %05d ' % 1)- এই কাজ করবে। print('This number will be padded with 4 zeros: %05s ' % 1)- এটি `
স্ক্ররম

28

formatপাইথন ২.6 এ পদ্ধতিটি চালু হয়েছিল। এটি আরও সক্ষম এবং ব্যবহার করা খুব বেশি কঠিন নয়:

>>> "Hello {}, my name is {}".format('john', 'mike')
'Hello john, my name is mike'.

>>> "{1}, {0}".format('world', 'Hello')
'Hello, world'

>>> "{greeting}, {}".format('world', greeting='Hello')
'Hello, world'

>>> '%s' % name
"{'s1': 'hello', 's2': 'sibal'}"
>>> '%s' %name['s1']
'hello'

11
এই উত্তরটি উন্নত হবে যদি এটি ব্যাখ্যা করে যে প্রশ্নে বাক্য বাক্যটি পাঠ্যকে ফর্ম্যাট করে এবং তারপরে আরও নতুন পদ্ধতিটি প্রদর্শন করে। সেভাবে এটি নিজেরাই দাঁড়াতে পারে। প্রশ্নের উদাহরণের সমতুল্য একটি উদাহরণ প্রদান করাও একটি প্লাস হবে।
স্টিভ এস

13

%sপাইথনের স্ট্রিং ফর্ম্যাটিং ক্ষমতা ব্যবহার করার সময় একটি রূপান্তর ধরণের স্ট্রিং নির্দেশ করে। আরও নির্দিষ্টভাবে, ফাংশনটি %sব্যবহার করে একটি নির্দিষ্ট মানটিকে স্ট্রিংয়ে রূপান্তর করে str()। এটি %rরূপান্তর ধরণের সাথে তুলনা করুন যা repr()মান রূপান্তরকরণের জন্য ফাংশনটি ব্যবহার করে ।

স্ট্রিং ফর্ম্যাটিংয়ের জন্য দস্তাবেজগুলি একবার দেখুন ।


13

%sএবং %dস্ট্রিং / দশমিক / ভাসমান ইত্যাদি ফর্ম্যাটের জন্য ফর্ম্যাট স্পেসিফায়ার বা স্থানধারক

সর্বাধিক সাধারণ ব্যবহৃত ফর্ম্যাট নির্দিষ্টকরণকারী:

%s : স্ট্রিং

%d : দশমিক

%f : ভাসা

স্ব বর্ণনামূলক কোড:

name = "Gandalf"
extendedName = "the Grey"
age = 84
IQ = 149.9
print('type(name):', type(name)) #type(name): <class 'str'>
print('type(age):', type(age))   #type(age): <class 'int'>   
print('type(IQ):', type(IQ))     #type(IQ): <class 'float'>   

print('%s %s\'s age is %d with incredible IQ of %f ' %(name, extendedName, age, IQ)) #Gandalf the Grey's age is 84 with incredible IQ of 149.900000 

#Same output can be printed in following ways:


print ('{0} {1}\'s age is {2} with incredible IQ of {3} '.format(name, extendedName, age, IQ))          # with help of older method
print ('{} {}\'s age is {} with incredible IQ of {} '.format(name, extendedName, age, IQ))          # with help of older method

print("Multiplication of %d and %f is %f" %(age, IQ, age*IQ)) #Multiplication of 84 and 149.900000 is 12591.600000          

#storing formattings in string

sub1 = "python string!"
sub2 = "an arg"

a = "i am a %s" % sub1
b = "i am a {0}".format(sub1)

c = "with %(kwarg)s!" % {'kwarg':sub2}
d = "with {kwarg}!".format(kwarg=sub2)

print(a)    # "i am a python string!"
print(b)   # "i am a python string!"
print(c)    # "with an arg!"
print(d)   # "with an arg!"

6

আপনার দ্বিতীয় প্রশ্নের উত্তরে: এই কোডটি কী করে? ...

এটি পাইথন স্ক্রিপ্টের জন্য মোটামুটি স্ট্যান্ডার্ড ত্রুটি-চেকিং কোড যা কমান্ড-লাইন আর্গুমেন্টগুলি গ্রহণ করে।

সুতরাং প্রথম ifবিবৃতিটি অনুবাদ করে: আপনি যদি আমাকে কোনও যুক্তি না দিয়ে থাকেন তবে আমি আপনাকে বলতে যাচ্ছি যে কীভাবে ভবিষ্যতে আপনি আমাকে যুক্তিটি পাস করবেন, উদাহরণস্বরূপ আপনি এই অন-স্ক্রিনটি দেখতে পাবেন:

Usage: myscript.py database-name

পরবর্তী ifবিবৃতিটি পরীক্ষা করে দেখেছিল যে আপনি স্ক্রিপ্টটিতে যে 'ডাটাবেস-নাম' দিয়েছেন তা আসলে ফাইল সিস্টেমে রয়েছে কি না। যদি তা না হয় তবে আপনি এই জাতীয় বার্তা পাবেন:

ERROR: Database database-name was not found!

ডকুমেন্টেশন থেকে :

আরজিভি [0] হ'ল স্ক্রিপ্টের নাম (এটি একটি সম্পূর্ণ পথের নাম কিনা তা অপারেটিং সিস্টেম নির্ভর করে)। কমান্ডটি যদি অনুবাদকের কাছে -c কমান্ড লাইন বিকল্পটি ব্যবহার করে কার্যকর করা হয়, argv [0] '-c' স্ট্রিংয়ে সেট করা আছে। পাইথন ইন্টারপ্রেটারের কাছে যদি কোনও স্ক্রিপ্টের নাম পাস না করা হয়, তবে argv [0] খালি স্ট্রিং।


2

পাইথন 3 এ এখানে একটি ভাল উদাহরণ।

  >>> a = input("What is your name?")
  What is your name?Peter

  >>> b = input("Where are you from?")
  Where are you from?DE

  >>> print("So you are %s of %s" % (a, b))
  So you are Peter of DE
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.