ফর্ম্যাট আউটপুট স্ট্রিং, ডান প্রান্তিককরণ


149

আমি x, y, z সহ স্থানাঙ্কযুক্ত একটি পাঠ্য ফাইল প্রসেস করছি

     1      128  1298039
123388        0        2
....

প্রতিটি লাইন 3 আইটেম ব্যবহার করে সীমিত করা হয়

words = line.split()

ডেটা প্রক্রিয়াকরণের পরে আমাকে অন্য টিএসটি ফাইলে স্থানাঙ্কগুলি লিখতে হবে যাতে প্রতিটি কলামের আইটেমগুলি ডানদিকে সংযুক্ত থাকে (পাশাপাশি ইনপুট ফাইলও)। প্রতিটি লাইন স্থানাঙ্ক দ্বারা গঠিত

line_new = words[0]  + '  ' + words[1]  + '  ' words[2].

std::setw()সি ++ তে প্রস্থ এবং প্রান্তিককরণ সেট করার অনুমতি দেওয়ার মতো কোনও হেরফের আছে কি ?

উত্তর:


230

নতুন str.formatসিনট্যাক্স ব্যবহার করে এই পদ্ধতির চেষ্টা করুন :

line_new = '{:>12}  {:>12}  {:>12}'.format(word[0], word[1], word[2])

এবং এটি পুরানো %বাক্য গঠন ব্যবহার করে কীভাবে করা যায় (পাইথনের পুরানো সংস্করণগুলির জন্য দরকারী যা সমর্থন করে না str.format):

line_new = '%12s  %12s  %12s' % (word[0], word[1], word[2])

39
"পুরাতন" সিনট্যাক্সটি কীভাবে পরিষ্কার, সহজেই পড়া সহজ এবং খাটো হয় তা নোট করুন।
fyngyrz

2
আমি ভেবেছিলাম যে সরবরাহ করা আছে তার চেয়ে আরও বেশি সরাসরি লিঙ্ক যুক্ত করব: ডকস.পাইথন.আর.

48
সংক্ষিপ্ত আকারে, ক্লিনারটি আসলে কী তা আমি জানি না, তবে 'পড়া সহজ' কারণ এটি পরিচিত, কারণ আমি মনে করি। যদি আপনি এর মধ্যে একটির সাথে ইতিমধ্যে পরিচিত না হন তবে নতুন ফর্ম্যাটটি পড়া সহজ মনে হয়। স্ট্রিং ফর্ম্যাটিংয়ের জন্য "। ফর্ম্যাট" অবশ্যই শতাংশ / মডুলোর চেয়ে স্বজ্ঞাত মনে হয়। ডান সারিবদ্ধকরণের জন্য ডান তীরটিও বেশ স্বজ্ঞাত বলে মনে হচ্ছে।
চিহ্নিত করুন

2
@ মার্ক ওল্ড ওয়ে ক্লিনারটি হ'ল এটি কম অক্ষর ব্যবহার করে। হ্যাঁ পরিচিতির সাথে নতুন উপায়টি স্বজ্ঞাত হয়ে ওঠে তবে এটি পরিষ্কার এবং সহজ নয়। পুরানো উপায়টি তাদের কাছে যারা সিন্টেক্সে অভ্যস্ত, যা উপাসনীয় সি ভাষার মাধ্যমে অনুকরণীয় সংক্ষিপ্ততা এবং নির্ভুলতার ভাষা আমাদের কাছে আসে for নতুন উপায়ে এর নজির কী আছে?
স্টিফেন বোস্টন

2
@ স্টেফেনবস্টন আমি বিশেষজ্ঞদের পাঠযোগ্যতা ছেড়ে দেব, তবে নতুন উপায়টি সম্পূর্ণ পরিষ্কার clean পেরেনগুলি আর alচ্ছিক নয়। % গণিত অপারেটরের সাথে বিভ্রান্ত হতে পারে (যদিও প্রসঙ্গে নয়, তবে এক নজরে নিশ্চিত)। শব্দটি [এন] প্রত্যাশিত ধরণের না হলে (পুরানো উপায়টি ব্যর্থ হবে) এই ক্ষেত্রে স্ট্রিং)। নতুন উপায়ে আগত প্রকার কী তা জানার দরকার নেই, এটি সর্বদা কার্যকর হয়। পরিষ্কার এবং সহজ। সত্যি কথা বলতে, আমি প্রিন্টফ স্টাইলে কখনও স্বাচ্ছন্দ্য বোধ করি না (আমি বেশিরভাগ সিউটের সাথে সি করি) C
জিম

53

এটি ব্যবহার করে অর্জন করা যেতে পারে rjust:

line_new = word[0].rjust(10) + word[1].rjust(10) + word[2].rjust(10)

51

আপনি এটির মতো সারিবদ্ধ করতে পারেন:

print('{:>8} {:>8} {:>8}'.format(*words))

যেখানে >মানে হলো " ডানদিকে সারিবদ্ধ " এবং 8হয় প্রস্থ সুনির্দিষ্ট মানের জন্য।

এবং এখানে একটি প্রমাণ:

>>> for line in [[1, 128, 1298039], [123388, 0, 2]]:
    print('{:>8} {:>8} {:>8}'.format(*line))


       1      128  1298039
  123388        0        2

পুনশ্চ. *lineমানে lineতালিকাটি প্যাক করা হবে না, সুতরাং .format(*line)একইভাবে কাজ করে .format(line[0], line[1], line[2])(ধরে নিবেন lineকেবল তিনটি উপাদান যুক্ত একটি তালিকা)।



18

এখানে আপনি কীভাবে 'এফ-স্ট্রিং' ফর্ম্যাট ব্যবহার করে ফর্ম্যাট করতে পারেন তা অন্য উপায়:

print(
    f"{'Trades:':<15}{cnt:>10}",
    f"\n{'Wins:':<15}{wins:>10}",
    f"\n{'Losses:':<15}{losses:>10}",
    f"\n{'Breakeven:':<15}{evens:>10}",
    f"\n{'Win/Loss Ratio:':<15}{win_r:>10}",
    f"\n{'Mean Win:':<15}{mean_w:>10}",
    f"\n{'Mean Loss:':<15}{mean_l:>10}",
    f"\n{'Mean:':<15}{mean_trd:>10}",
    f"\n{'Std Dev:':<15}{sd:>10}",
    f"\n{'Max Loss:':<15}{max_l:>10}",
    f"\n{'Max Win:':<15}{max_w:>10}",
    f"\n{'Sharpe Ratio:':<15}{sharpe_r:>10}",
)

এটি নিম্নলিখিত আউটপুট সরবরাহ করবে:

Trades:              2304
Wins:                1232
Losses:              1035
Breakeven:             37
Win/Loss Ratio:      1.19
Mean Win:           0.381
Mean Loss:         -0.395
Mean:               0.026
Std Dev:             0.56
Max Loss:          -3.406
Max Win:             4.09
Sharpe Ratio:      0.7395

আপনি এখানে যা করছেন তা আপনি বলছেন যে প্রথম কলামটি 15 অক্ষর দীর্ঘ এবং এটি যথাযথ এবং দ্বিতীয় কলামটি (মান) 10 অক্ষর দীর্ঘ এবং এটি সঠিক ন্যায়সঙ্গত।


বিন্যাসগুলির প্রস্থকে পরামিতি করার কোনও উপায় আছে কি? এই উদাহরণে আপনি যদি 20 এবং 15 প্রস্থে ফর্ম্যাট পরিবর্তন করতে চান তবে একাধিক লাইন পরিবর্তন করতে হবে। widths = [15, 10] f"{'Trades:':<width[0]}{cnt:>width[1]}",আমি উপরের মত মত অর্জন করতে চাই
টমাসজ সাবাহা

1
বুঝেছি! সম্ভবত কেউ এটি সহায়ক বলে মনে করবে। এর জন্য আমার আরও একটি নেস্টেড বন্ধনী প্রয়োজন:f"{'Trades:':<{width[0]}}{cnt:>{width[1]}}"
টমাসজ সাবায়িকা

1
কখনও কখনও সেরা উত্তরগুলি হ'ল যা সঠিক প্রশ্নের উত্তর দেয় না। এর জন্য ধন্যবাদ! :)
ব্রায়ান উইলি

5

আউটপুট সহজ টেবুলেশন:

a = 0.3333333
b = 200/3
print("variable a    variable b")
print("%10.2f    %10.2f" % (a, b))

আউটপুট:

variable a    variable b
      0.33         66.67

% 10.2f: 10 হল সর্বনিম্ন দৈর্ঘ্য এবং 2 দশমিক স্থানের সংখ্যা।


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