পাইথন স্ট্রিং [u'string '] হিসাবে মুদ্রণ করে


142

এটি অবশ্যই একটি সহজ হবে তবে এটি সত্যিই আমাকে বাগিয়ে দিচ্ছে।

আমার কাছে একটি স্ক্রিপ্ট রয়েছে যা একটি ওয়েবপৃষ্ঠায় পড়ে এবং পার্স করার জন্য বিউটিফুল স্যুপ ব্যবহার করে। থেকে স্যুপ আমি সমস্ত লিঙ্কের নিষ্কর্ষ হিসাবে আমার চূড়ান্ত লক্ষ্য link.contents প্রিন্ট আউট হয়।

আমি যে পাঠ্যটি পার্স করছি তা সমস্তই ASCII। আমি জানি যে পাইথন স্ট্রিংগুলি ইউনিকোড হিসাবে বিবেচনা করে, এবং আমি নিশ্চিত যে এটি খুব সহজ, আমার পুঁজির স্ক্রিপ্টে কেবল কোনও কাজে লাগেনি।

আমি যখনই 'স্ট্রিং' ধারণ করে এমন একটি ভেরিয়েবল মুদ্রণ করতে যাই তখনই আমি [u'String']স্ক্রিনে মুদ্রিত হই। এটিকে আবার এসকিআই-তে ফিরিয়ে আনার কোনও সহজ উপায় আছে বা এটিকে ফালা ফেলার জন্য আমার একটি রেজেেক্স লিখতে হবে?


: অনেক বেশি পরিষ্কারভাবে ভাষায় প্রশ্ন (এবং উত্তর) -এর সম্ভাব্য প্রতিলিপির stackoverflow.com/q/2464959/1390788
Terrabits

এটা কি তোমার প্রশ্নের উত্তর? পাইথন স্ট্রিংয়ের ইউ উপসর্গটি কী?
23

উত্তর:


118

[u'ABC']ইউনিকোড স্ট্রিংগুলির এক-উপাদান তালিকা হবে। সুন্দর স্যুপ সর্বদা ইউনিকোড উত্পাদন করে । সুতরাং আপনাকে তালিকাটি একটি একক ইউনিকোড স্ট্রিংয়ে রূপান্তর করতে হবে এবং তারপরে এএসসিআইআইতে রূপান্তর করতে হবে।

আপনি কীভাবে এক-এলিমেন্টের তালিকা পেয়েছেন তা আমি সুনির্দিষ্টভাবে জানি না; বিষয়বস্তু সদস্যটি স্ট্রিং এবং ট্যাগগুলির একটি তালিকা হতে পারে যা আপাতত আপনার কাছে নেই not ধরে নিচ্ছি যে আপনি সত্যই সর্বদা একটি একক উপাদানের সাথে একটি তালিকা পান এবং আপনার পরীক্ষাটি কেবলমাত্র ASCII হয় আপনি এটি ব্যবহার করবেন:

 soup[0].encode("ascii")

তবে দয়া করে আপনার ডেটা সত্যই ASCII কিনা তা ডাবল-পরীক্ষা করে দেখুন। এটি বেশ বিরল। অনেক বেশি সম্ভবত এটি ল্যাটিন -1 বা utf-8।

 soup[0].encode("latin-1")


 soup[0].encode("utf-8")

অথবা আপনি সুন্দর স্যুপকে জিজ্ঞাসা করুন আসল এনকোডিংটি কী ছিল এবং এই এনকোডিংয়ে ফিরে পান:

 soup[0].encode(soup.originalEncoding)

6
আপনাকে আসলে এনকোডিংটি করতে হবে না, কারণ ওপি কেবল স্ট্রিং রেপিকেই দেখছে কারণ আপনি যখন কোনও তালিকা মুদ্রণ করেন তখন আপনি কীভাবে দেখেন তা ঠিক ts স্যুপ [0] স্ট্রিংয়ের বিষয়বস্তু প্রদর্শন করে রেটটির পরিবর্তে স্ট্রিংটি প্রদর্শন করতে যথেষ্ট হবে, কোট এবং ইউনিকোড সংশোধক নয়।
আয়রনফ্রোগি

2
আপনি ইউনিকোড হিসাবে উপস্থাপনিত পাঠ্যটি বেশিরভাগ ক্ষেত্রে বাইটে এনকোড করবেন না: আপনার ইউনিকোড সরাসরি পাইথনে মুদ্রণ করা উচিত:print(', '.join([u'ABC' , u'...']))
jfs

26

আপনার কাছে সম্ভবত একটি ইউনিকোড স্ট্রিংযুক্ত একটি তালিকা রয়েছে। reprএই হল [u'String']

আপনি এটিকে নিম্নোক্ত যে কোনও প্রকারের ব্যবহার করে বাইট স্ট্রিংয়ের তালিকায় রূপান্তর করতে পারেন:

# Functional style.
print map(lambda x: x.encode('ascii'), my_list)

# List comprehension.
print [x.encode('ascii') for x in my_list]

# Interesting if my_list may be a tuple or a string.
print type(my_list)(x.encode('ascii') for x in my_list)

# What do I care about the brackets anyway?
print ', '.join(repr(x.encode('ascii')) for x in my_list)

# That's actually not a good way of doing it.
print ' '.join(repr(x).lstrip('u')[1:-1] for x in my_list)

1
দয়া করে, যেমন ভয়াবহতা এড়ান repr(x).lstrip('u')[1:-1]print ", ".join(my_list)পরিবর্তে ইউনিকোড স্ট্রিংগুলির একটি তালিকা ফর্ম্যাট করতে : এর মতো কিছু ব্যবহার করুন ।
jfs

1
মন্তব্যটিতে বলা হয়েছে: "এটি আসলে এটি করার ভাল উপায় নয়"। লোলজের জন্য এখানেই!
ডিডিএ

9
import json, ast
r = {u'name': u'A', u'primary_key': 1}
ast.literal_eval(json.dumps(r)) 

মুদ্রণ করবে

{'name': 'A', 'primary_key': 1}

1
এই পদ্ধতিটি আমার কাছে বেশ মিষ্টি দেখাচ্ছে, কেন কোনও ভোট নেই? কোন পারফরম্যান্স প্রভাব সম্পর্কে আমাদের চিন্তা করা উচিত?
jrich523

8

যদি একক উপাদান তালিকায় অ্যাক্সেস / প্রিন্ট করা হয় (যেমন, ক্রমান্বয়ে বা ফিল্টার করা):

my_list = [u'String'] # sample element
my_list = [str(my_list[0])]

1
আপনি একটি তালিকা বোধগম্য করুন:my_list = [str(my_list[x]) for x in range(len(my_list))]
গেভ্যাং

4

str () ফাংশনে আউটপুটটি পাস করুন এবং এটি ইউনিকোড আউটপুটকে রূপান্তরিত করবে। এছাড়াও আউটপুট মুদ্রণ করে এটি এর থেকে u '' ট্যাগগুলি মুছে ফেলবে।


4

[u'String'] পাইথন 2 এ ইউনিকোড স্ট্রিং রয়েছে এমন তালিকার একটি পাঠ্য উপস্থাপনা।

আপনি চালাতে পারেন print(some_list)তাহলে এটি সমতূল্য
print'[%s]' % ', '.join(map(repr, some_list))অর্থাত, টাইপ সঙ্গে একটি পাইথন বস্তুর একটি টেক্সট উপস্থাপনা তৈরি করতে list, repr()ফাংশন প্রতিটি আইটেমের জন্য বলা হয়।

পাইথন অবজেক্ট এবং এর পাঠ্য উপস্থাপনা গুলিয়ে ফেলবেন না - repr('a') != 'a'এমনকি পাঠ্য উপস্থাপনার পাঠ্য উপস্থাপনাও পৃথক:repr(repr('a')) != repr('a')

repr(obj)একটি স্ট্রিং প্রদান করে যা কোনও অবজেক্টের মুদ্রণযোগ্য উপস্থাপনা ধারণ করে। এটির উদ্দেশ্য হ'ল কোনও রিপ্রেইল-এ ডিবাগিংয়ের জন্য কার্যকর হতে পারে এমন কোনও সামগ্রীর দ্ব্যর্থহীন উপস্থাপনা। প্রায়ইeval(repr(obj)) == obj

কল এড়াতে repr(), আপনি সরাসরি তালিকার আইটেমগুলি মুদ্রণ করতে পারেন (যদি তারা সমস্ত ইউনিকোড স্ট্রিং থাকে) যেমন:print ",".join(some_list) - একটি কমা দ্বারা পৃথক করা তালিকা মুদ্রণ করে:String

হার্ডকোডযুক্ত অক্ষর এনকোডিং ব্যবহার করে কোনও ইউনিকোড স্ট্রিং এনকোড করবেন না, তার পরিবর্তে সরাসরি ইউনিকোড প্রিন্ট করুন। অন্যথায় কোডটি ব্যর্থ হতে পারে কারণ এনকোডিং সমস্ত অক্ষরকে উপস্থাপন করতে পারে না, উদাহরণস্বরূপ, যদি আপনি 'ascii'অ-এসকিআই অক্ষরের সাথে এনকোডিং ব্যবহার করার চেষ্টা করেন । অথবা পরিবেশটি নিঃশব্দে মোজিবাকে তৈরি করে (দুর্নীতিগ্রস্থ ডেটা একটি পাইপলাইনে আরও প্রেরণ করা হয়) যদি পরিবেশ কোনও এনকোডিং ব্যবহার করে যা হার্ডকোডযুক্ত এনকোডিংয়ের সাথে সঙ্গতিপূর্ণ নয়।


3

ব্যবহার করুন dirবাtypeএটি কী তা 'স্ট্রিং' । আমার সন্দেহ হয় যে এটি বিউটিফুলসপের একটি ট্যাগ অবজেক্ট, এটি স্ট্রিংয়ের মতো মুদ্রণ করে তবে এটি আসলে একটি নয়। অন্যথায়, এটি একটি তালিকার ভিতরে এবং আপনাকে প্রতিটি স্ট্রিং আলাদাভাবে রূপান্তর করতে হবে।

যাই হোক না কেন, আপনি ইউনিকোড ব্যবহার করতে আপত্তি করছেন? কোন নির্দিষ্ট কারণ?


আমি বিগত কয়েক দিন ধরে বিউটিফুলসুপের দিকে তাকিয়ে আছি। আমি বুঝতে পারছিলাম না যে জ্নুচু কীভাবে আপনার ['স্ট্রিং'] পাবেন [ইউ 'স্ট্রিং'] না। অ্যান্ড্রু জাফের কাছে তাঁর মন্তব্য দেখে মনে হয় এটি একটি তালিকা।
ব্যাটব্র্যাট

3

আসলেই বলতে u'String'চাও?

যে কোনও ইভেন্টে, আপনি কি str(string)ইউনিকোড-স্ট্রিংয়ের চেয়ে স্ট্রিংটি পেতে পারেন না ? (পাইথন 3 এর জন্য এটি আলাদা হওয়া উচিত, যার জন্য সমস্ত স্ট্রিং ইউনিকোড)


আমার পরিষ্কার হওয়া উচিত ছিল। আমি str () ব্যবহার করছি তবে এখনও মুদ্রণের সময় নীচের মতো আউটপুট পাচ্ছি। [u'ABC '] [u'DEF'] [u'GHI '] [u'JKL'] ডেটাটি একটি ওয়েবপৃষ্ঠা থেকে পাঠ্য হিসাবে ছাঁটা হয়, তারপরে একটি ডাটাবেসে (গুগল অ্যাপস্টোর) inোকানো হয়, তারপরে পুনরুদ্ধার করা এবং মুদ্রণ করা হয়।
gnuchu

-1

encode("latin-1") আমার ক্ষেত্রে আমাকে সাহায্য করেছেন:

facultyname[0].encode("latin-1")

-1

সম্ভবত আমি বুঝতে পারি না, কেন আপনি কেবল এলিমেন্ট.টেক্সট পাচ্ছেন না এবং এটি ব্যবহারের আগে এটি রূপান্তর করতে পারেন কেন? উদাহরণস্বরূপ (আপনি কেন এটি করবেন তা জানেন না তবে ...) ওয়েব পৃষ্ঠার সমস্ত লেবেল উপাদানগুলি সন্ধান করুন এবং মাই টেক্সট নামে পরিচিত না পাওয়া পর্যন্ত তাদের মধ্যে পুনরাবৃত্তি করুন

        avail = []
        avail = driver.find_elements_by_class_name("label");
        for i in avail:
                if  i.text == "MyText":

স্ট্রিংটি আই থেকে রূপান্তর করুন এবং আপনি যা করতে চান তা করুন ... সম্ভবত আসল বার্তায় কিছু মিস করছি? বা আপনি যা খুঁজছিলেন এটি ছিল?


আপনি অংশ যেখানে প্রশ্ন হল দিতে ভুলে গেছেন সম্পর্কে কিভাবে করতে হবে "আমি থেকে STRING রূপান্তর করুন"।
নাথান টগি

আহ, সমস্ত মন্তব্য থেকে ধন্যবাদ আমি ভেবেছিলাম যে সমস্যাটি রূপান্তর করার মান পাচ্ছে
স্টিভেন

তবে ন্যায্য বলতে আইটেক্সটটি আসল স্ট্রিং মান, কিছু লোকের মতো "অ্যারে থেকে এটি টেনে তোলার" দরকার নেই যেমন লেবেল ইলেমেটে [u'String '] এর পাঠ্য মান থাকলে i.text স্ট্রিং হবে
স্টিভেন
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.