কোনও ইউআরএলে সর্বশেষ স্ল্যাশের পরে কীভাবে সবকিছু পাবেন?


110

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

URL: http://www.test.com/TEST1
returns: TEST1

URL: http://www.test.com/page/TEST2
returns: TEST2

URL: http://www.test.com/page/page/12345
returns: 12345

আমি urlparse চেষ্টা করেছি, তবে এটি আমাকে পুরো পথের ফাইলের নাম দেয়, যেমন page/page/12345


1
যদি ইউআরএলে কোয়েরিস্ট্রিংগুলি থাকতে পারে ...?foo=barএবং আপনি এটি চান না; আমি urlparseনাইজের সাজের সাথে সংমিশ্রণে ব্যবহারের পরামর্শ দেব basename
plundra

উত্তর:


243

আপনার অভিনব জিনিসগুলির দরকার নেই, স্ট্যান্ডার্ড লাইব্রেরিতে স্ট্রিং পদ্ধতিগুলি দেখুন এবং আপনি সহজেই আপনার ফাইলটি 'ফাইলের নাম' অংশ এবং বাকীগুলির মধ্যে ভাগ করতে পারেন:

url.rsplit('/', 1)

সুতরাং আপনি যে অংশটি আগ্রহী তা কেবল এর সাথে পেতে পারেন:

url.rsplit('/', 1)[-1]

10
url.rsplit('/', 1)একটি তালিকা দেয় এবং url.rsplit('/', 1)[-1]শেষ স্ল্যাশের পরে কিছুটা হয়।
হুগো

5
আর একটি উপায় হ'ল: url.rsplit ('/', 1) .pop ()
অ্যালেক্স ফোর্টিন

সতর্কতা: এই প্রাথমিক কৌশলটি ইউআরএলগুলিতে পুরোপুরি বিরতি http://www.example.com/foo/?entry=the/bar#another/bar। তবে বেসিক পার্সিংয়ের মতো rsplitঠিক আছে যদি আপনি একেবারে নিশ্চিত হন তবে আপনার ক্যোয়ারী বা টুকরা পরামিতিগুলিতে কোনও স্ল্যাশ কখনও হবে না। তবে, rsplitকোয়েরি হ্যান্ডলিংয়ের সাথে কয়টি কোডবেসে আসলে এই কোড এবং এর সাথে যুক্ত বাগ রয়েছে তা ভেবে আমি কাঁপছি । যে ব্যক্তিরা নিখুঁত নিরাপত্তা এবং বিশ্বাসযোগ্যতা চায় তাদের urllib.parse()পরিবর্তে ব্যবহার করা উচিত ! তারপরে আপনি pathযে মানটি ফিরে আসে সেটিকে ব্যবহার করতে এবং আপনি কেবল পথটি বিভক্ত করেছেন তা নিশ্চিত করতে আপনি এটি ভাগ করতে পারেন।
মিচ ম্যাকম্যাবার্স

কোড: আরও কার্যকর পদ্ধতি কীভাবে প্রয়োগ করা যায় তার একটি উদাহরণ: from urllib.parse import urlparse; p = urlparse("http://www.example.com/foo.htm?entry=the/bar#another/bar"); print(p.path.rsplit("/", 1)[-1]) ফলাফল:foo.htm
মিচ ম্যাকম্যাবার্স



10

আপনি এটির মতো করতে পারেন:

head, tail = os.path.split(url)

যেখানে পুচ্ছ আপনার ফাইলের নাম হবে।


6

urlparse যদি আপনি চান (তবে যেকোন প্রশ্নের স্ট্রিং প্যারামিটারগুলি থেকে মুক্তি পেতে) ব্যবহার করতে ভাল fine

import urllib.parse

urls = [
    'http://www.test.com/TEST1',
    'http://www.test.com/page/TEST2',
    'http://www.test.com/page/page/12345',
    'http://www.test.com/page/page/12345?abc=123'
]

for i in urls:
    url_parts = urllib.parse.urlparse(i)
    path_parts = url_parts[2].rpartition('/')
    print('URL: {}\nreturns: {}\n'.format(i, path_parts[2]))

আউটপুট:

URL: http://www.test.com/TEST1
returns: TEST1

URL: http://www.test.com/page/TEST2
returns: TEST2

URL: http://www.test.com/page/page/12345
returns: 12345

URL: http://www.test.com/page/page/12345?abc=123
returns: 12345




0

partitionএবং rpartitionএই জাতীয় জিনিসগুলির জন্যও কার্যকর:

url.rpartition('/')[2]


-1
url ='http://www.test.com/page/TEST2'.split('/')[4]
print url

আউটপুট: TEST2


2
আপনার সত্যিকারের -1সূচক হিসাবে উত্তীর্ণ হওয়া উচিত , অন্যথায় এটি কেবল সেই সাথে অনেকগুলি স্ট্রিংগুলিতে কাজ করে/
Chris_Rands
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.