পাইথনে স্ট্রিং ফর্ম্যাটিং সহ টিপল মুদ্রণ


126

সুতরাং, আমি এই সমস্যা আছে। আমি টুপল পেয়েছি (1,2,3) যা আমার স্ট্রিং ফর্ম্যাটিংয়ের সাথে মুদ্রণ করা উচিত। যেমন।

tup = (1,2,3)
print "this is a tuple %something" % (tup)

এবং এই যেমন বন্ধনী, সহ tuple উপস্থাপনা মুদ্রণ করা উচিত

এটি একটি টিপল (1,2,3)

তবে আমি TypeError: not all arguments converted during string formattingপরিবর্তে পেতে ।

আমি কীভাবে বিশ্বে এটি করতে সক্ষম? কিন্ডা এখানে হেরে গেছে তাই আপনি যদি আমাকে একটি সঠিক দিকে নির্দেশ করতে পারেন :)

উত্তর:


201
>>> thetuple = (1, 2, 3)
>>> print "this is a tuple: %s" % (thetuple,)
this is a tuple: (1, 2, 3)

একমাত্র আইটেম হিসাবে (thetuple,)অংশ হিসাবে আগ্রহের tuple সঙ্গে একটি সিঙ্গলটন টুপল করা এখানে মূল বিট।


পাইথন 3 মুদ্রণ একটি বিবরণ নয়, একটি ফাংশন, তাই আপনাকে লিখতে হবে print(....)
জেজি

53

লক্ষ করুন যে %বাক্য গঠনটি অপ্রচলিত। ব্যবহার করুন str.format, যা সহজ এবং আরও পাঠযোগ্য:

t = 1,2,3
print 'This is a tuple {0}'.format(t)


%অচল কেন আমি কখনই জানতাম না তবে আমি এখন আপনাকে সর্বদা str.formatঅন্ধভাবেই করি। এটুকু মনে রাখবেন না, আমি পূর্ণ বাছাইকারী কী সে সম্পর্কে আগ্রহী, কারণ সাধারণটি সম্পূর্ণ যোগ্যতা অর্জনকারী {0}নয়, তবে কেবল অবস্থানের সূচক। একটির জন্য int, আমি যাঁকে পূর্ণ যোগ্যতা বলি তা হ'ল {0:d}(বা {3:d}উদাহরণস্বরূপ, যদি প্রিন্ট করা হয় তবে str.formatপদ্ধতিতে 4 র্থ স্থানে উপস্থিত হয় )। আমি {0:s}কোয়ালিফায়ার ব্যবহার করে একটি টিপল মুদ্রণের চেষ্টা করেছি তবে এটি কার্যকর হয় না। তো, টিপলের মতো কোনও কিছুর পুরো যোগ্যতা কী?
রায়

1
@ রায় যে সত্যিকার অর্থে আসে না। আপনি উল্লেখ করতে পারেন এমন প্রচুর বিকল্প রয়েছে যা ডকুমেন্টেশনে পাওয়া যাবে। আপনি যদি কিছু মুদ্রণ করতে চান তবে আপনি strবলতে পারেন {!s}, তবে এটি ডিফল্ট, সুতরাং এটি অপ্রয়োজনীয়। reprপরিবর্তে আপনি যদি ব্যবহার করতে চান তবে আপনি এটি করতে পারেন {!r}। এর বিপরীতে %, dপূর্ণসংখ্যার জন্য বলার দরকার নেই ।
অ্যান্টিমনি

2
আমি নতুন সিনট্যাক্স পছন্দ করি কারণ এটি আমার ফর্ম্যাটটি নতুন ফর্ম্যাটের চেয়ে কম ভারবস, এবং সি স্ট্রিং ফর্ম্যাটিংয়ের সাথেও আমি খুব পছন্দ করি যা আমি জানি এবং ভালোবাসি
পৌল

মনে রাখবেন, পাইথন 3 তেও এটি %পুরোপুরি অপ্রচলিত নয়। প্রকৃতপক্ষে, pylintআপনি মডিউলের .formatমধ্যে বাক্য গঠন ব্যবহার করলেও অভিযোগ করবেন logging: stackoverflow.com/a/34634301/534238
মাইক উইলিয়ামসন

39

উপরে দেওয়া অনেক উত্তর সঠিক ছিল। এটি করার সঠিক উপায় হ'ল:

>>> thetuple = (1, 2, 3)
>>> print "this is a tuple: %s" % (thetuple,)
this is a tuple: (1, 2, 3)

তবে '%'স্ট্রিং অপারেটরটি অপ্রচলিত হলে বিতর্ক হয়েছিল । অনেকে উল্লেখ করেছেন যে এটি অবশ্যই অপ্রচলিত নয়, কারণ '%'স্ট্রিং অপারেটর একটি স্ট্রিং স্টেটমেন্টের সাথে তালিকার তথ্যের সাথে একত্রিত করা আরও সহজ।

উদাহরণ:

>>> tup = (1,2,3)
>>> print "First: %d, Second: %d, Third: %d" % tup
First: 1, Second: 2, Third: 3

তবে, .format()ফাংশনটি ব্যবহার করে , আপনি একটি ভার্বোজ স্টেটমেন্ট দিয়ে শেষ করবেন।

উদাহরণ:

>>> tup = (1,2,3)
>>> print "First: %d, Second: %d, Third: %d" % tup
>>> print 'First: {}, Second: {}, Third: {}'.format(1,2,3)
>>> print 'First: {0[0]}, Second: {0[1]}, Third: {0[2]}'.format(tup)

First: 1, Second: 2, Third: 3
First: 1, Second: 2, Third: 3
First: 1, Second: 2, Third: 3

আরও বেশি, '%'এছাড়াও স্ট্রিং অপারেটর আমাদের যেমন ডাটা টাইপ যাচাই করতে জন্য দরকারী %s, %d, %i, যখন .format () মাত্র দুটি রূপান্তর পতাকা সমর্থন : '!s'এবং '!r'


আমি ফর্ম্যাট () ব্যবহার করে রূপান্তর করেছি তবে% পদ্ধতির এই সুবিধা (একটি টিউলের প্রতিটি উপাদানকে ফর্ম্যাট করতে সক্ষম এবং রূপান্তর করতে সক্ষম) বড় তাই আমার মনে হয় আমি ফিরে যাব। ধন্যবাদ।
বিল

1
আপনি প্রতিটি উপাদান জন্য বিন্যাস নির্দিষ্ট করতে পারেন। '{: d} {: s}'। ফর্ম্যাট (1, '2')
zk82

5
"তারকাচিহ্ন প্যাক না" tuple ভাল কাজ করে এর .format: tup = (1,2,3); print('First: {}, Second: {}, Third: {}'.format(*tup))
এম-ডিজেড

25
>>> tup = (1, 2, 3)
>>> print "Here it is: %s" % (tup,)
Here it is: (1, 2, 3)
>>>

দ্রষ্টব্য যে (tup,)একটি tuple একটি tuple রয়েছে। বাইরের টিপলটি% অপারেটরের যুক্তি is অভ্যন্তরীণ tuple এর বিষয়বস্তু, যা আসলে মুদ্রিত হয়।

(tup)বন্ধনীগুলির মধ্যে একটি অভিব্যক্তি, যা যখন মূল্যায়নের ফলাফল হয় tup

(tup,)পেছনের কমা সহ একটি টিউপল, এতে tupকেবল সদস্য হিসাবে রয়েছে ।


9

এটি স্ট্রিং ফর্ম্যাটিং ব্যবহার করে না, তবে আপনার এটি করতে সক্ষম হওয়া উচিত:

print 'this is a tuple ', (1, 2, 3)

আপনি যদি সত্যই স্ট্রিং ফর্ম্যাটিং ব্যবহার করতে চান:

print 'this is a tuple %s' % str((1, 2, 3))
# or
print 'this is a tuple %s' % ((1, 2, 3),)

দ্রষ্টব্য, এটি ধরে নিয়েছে আপনি 3.0 এরও আগে পাইথন সংস্করণ ব্যবহার করছেন।


7
t = (1, 2, 3)

# the comma (,) concatenates the strings and adds a space
print "this is a tuple", (t)

# format is the most flexible way to do string formatting
print "this is a tuple {0}".format(t)

# classic string formatting
# I use it only when working with older Python versions
print "this is a tuple %s" % repr(t)
print "this is a tuple %s" % str(t)

6

যদিও এই প্রশ্নটি বেশ পুরানো এবং এর বিভিন্ন উত্তর রয়েছে, তবুও আমি imho সর্বাধিক "পাইথোনিক" এবং পাঠযোগ্য / সংক্ষিপ্ত উত্তর যুক্ত করতে চাই।

যেহেতু সাধারণ tupleমুদ্রণ পদ্ধতিটি ইতিমধ্যে অ্যান্টিমনি দ্বারা সঠিকভাবে দেখানো হয়েছে, ফং কা চুন %sসিনট্যাক্সের সাথে সঠিকভাবে দেখিয়েছেন বলে এটি প্রতিটি উপাদানকে আলাদাভাবে একটি টুপলে মুদ্রণের জন্য একটি সংযোজন ।

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

tup = (1, 2, 3)
print('Element(s) of the tuple: One {0}, two {1}, three {2}'.format(*tup))

এটি জ্যাকব সিইআইআই দ্বারা বর্ণিত হিসাবে একটি একক-উপাদান টিউপল প্রিন্ট করার সময় ট্রেলিং কমা মুদ্রণও এড়িয়ে যায় replace। (যদিও ইমো প্রচ্ছদ কমা উপস্থাপনা প্রিন্ট করার সময় টাইপ উপস্থাপনা সংরক্ষণ করতে চান তা সঠিক ):

tup = (1, )
print('Element(s) of the tuple: One {0}'.format(*tup))

5

আমি মনে করি এটি করার সর্বোত্তম উপায় হ'ল:

t = (1,2,3)

print "This is a tuple: %s" % str(t)

আপনি যদি প্রিন্টফ স্টাইল বিন্যাসের সাথে পরিচিত হন তবে পাইথন তার নিজস্ব সংস্করণ সমর্থন করে। পাইথনে, এটি স্ট্রিংগুলিতে প্রয়োগ করা "%" অপারেটর (মডুলো অপারেটরের একটি ওভারলোড) ব্যবহার করে করা হয়, যা কোনও স্ট্রিং নেয় এবং এটিতে মুদ্রণ-স্টাইল বিন্যাস প্রয়োগ করে।

আমাদের ক্ষেত্রে, আমরা এটি "এটি একটি টিউপল:" মুদ্রণ করতে বলছি, এবং তারপরে একটি স্ট্রিং "% s" যুক্ত করুন, এবং প্রকৃত স্ট্রিংয়ের জন্য, আমরা টিউপলের একটি স্ট্রিং উপস্থাপনায় যাচ্ছি (স্ট্রিং কল করে) T))।

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


2

অনুগ্রহ করে নোট করুন যে টিপলটিতে কেবল একটি আইটেম থাকলে একটি অনুবর্তনীয় কমা যুক্ত হবে। উদাহরণ:

t = (1,)
print 'this is a tuple {}'.format(t)

এবং আপনি পাবেন:

'this is a tuple (1,)'

কিছু ক্ষেত্রে যেমন আপনি মাইএসকিএল ক্যোয়ারী স্ট্রিংয়ের মতো একটি উদ্ধৃত তালিকা পেতে চান

SELECT name FROM students WHERE name IN ('Tom', 'Jerry');

ফর্ম্যাট করার পরে আপনার টেলিং কমা ব্যবহার (",)", ')') অপসারণের বিষয়টি বিবেচনা করা দরকার কারণ টিপলটিতে কেবল 'টম',) এর মতো 1 টি আইটেম রয়েছে তাই টেলিং কমাটি অপসারণ করা দরকার:

query_string = 'SELECT name FROM students WHERE name IN {}'.format(t).replace(',)', ')')

আউটপুটটিতে এই কমাটি অপসারণ করার যদি আপনার কাছে শালীন উপায় থাকে তবে দয়া করে প্রস্তাব দিন।


1
আমি সাধারণত 'এটি একটি টিপল ({})' এর বিন্যাস (',' .জয়েন (মানচিত্র (টিআর, টি))) এর মতো কিছু পছন্দ করি। এইভাবে আপনাকে ফর্ম্যাট স্ট্রিংয়ে বিদ্যমান কমা বা প্রথম বন্ধনী নিয়ে গণ্ডগোলের বিষয়ে চিন্তা করতে হবে না।
অ্যান্টিমনি

1
আপনার format()ডাটাবেস প্রশ্নগুলিতে ব্যবহার করা উচিত নয় । প্রতিটি লাইব্রেরিতে এর জন্য প্রয়োগযোগ্য পদ্ধতি রয়েছে।
কেটালিক

@ কেটালিক আপনি এটি স্পষ্টভাবে বুঝতে পারবেন না। ফর্ম্যাট () এর ডাটাবেস প্রশ্নের সাথে কোনও সম্পর্ক নেই do ফর্ম্যাট () অজগর স্ট্রিং অপারেশনের সাধারণ ফাংশন। কটাক্ষপাত আছে docs.python.org/2/library/string.html এবং আপনি এটি থেকে শিখবেন। ডাটাবেস ক্যোয়ারীগুলির সাথে করার মতো কিছুই মনে নেই।
জ্যাকব সিইউআই

format()ব্যবহারকারীদের কাছ থেকে সংগ্রহ করা মানগুলি ব্যবহার করে এসকিউএল ইঞ্জেকশন লাগতে পারে। ইনপুট মানগুলিকে ক্যোয়ারিতে রাখার আগে তা বৈধকরণ করা আরও সুরক্ষিত। আরও তথ্যের জন্য এই নির্দেশিকা দেখুন: dev.mysql.com/doc/connector-python/en/… আপনি একটি ডাটাবেস টাইপ স্ট্রিং উপস্থাপনায় প্যারামিটার মানগুলি কাস্ট করতে পারেন এবং তারপরে এটি ক্যোয়ারী স্ট্রিংয়ে পেস্ট করতে পারেন। Initd.org/psycopg/docs/usage.html যেখানে আপনার %অপারেটরের সাথে একটি পাল্টা নমুনা রয়েছে এবং সেই execute()পদ্ধতি সহ একটি সমাধান রয়েছে যেখানে পদ্ধতির আরগগুলিতে ক্যোয়ারী প্যারামিটারগুলি পাস হচ্ছে at
কেটালিক

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


0

উত্তর পেতে এটি চেষ্টা করুন:

>>>d = ('1', '2') 
>>> print("Value: %s" %(d))
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: not all arguments converted during string formatting

যদি আমরা () এর ভিতরে কেবলমাত্র একটি টিপল রাখি তবে এটি নিজেই একটি টুপল তৈরি করে:

>>> (d)
('1', '2')

এর অর্থ উপরের মুদ্রণ বিবৃতিটি দেখতে পাবেন: মুদ্রণ ("মান:% s"% ('1', '2')) যা একটি ত্রুটি!

অত: পর:

>>> (d,)
(('1', '2'),)
>>> 

উপরে মুদ্রণের যুক্তিগুলি সঠিকভাবে খাওয়ানো হবে।



0

আপনি এটিকেও চেষ্টা করে দেখতে পারেন;

tup = (1,2,3)
print("this is a tuple {something}".format(something=tup))

আপনি ব্যবহার করতে পারবেন না %somethingসঙ্গে (tup)মাত্র কারণ প্যাকিং এবং tuple সঙ্গে ধারণা unpacking করুন।


-5

টক সস্তা, কোডটি দেখান:

>>> tup = (10, 20, 30)
>>> i = 50
>>> print '%d      %s'%(i,tup)
50  (10, 20, 30)
>>> print '%s'%(tup,)
(10, 20, 30)
>>> 
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.