পাইথনের সাথে ক্রস প্ল্যাটফর্মের পথে কোনও পাথ পরম পথ বা আপেক্ষিক পাথ কিনা তা কীভাবে পরীক্ষা করবেন?


142

ইউনিক্স পরম পথটি '/' দিয়ে শুরু হয়, অন্যদিকে উইন্ডোজ বর্ণানুক্রমিক 'সি:' বা '\' দিয়ে শুরু হয়। পথটি পরম বা আপেক্ষিক কিনা তা পরীক্ষা করার জন্য অজগরটির কোনও স্ট্যান্ডার্ড ফাংশন রয়েছে?

উত্তর:


207

os.path.isabsTrueযদি পথটি নিখুঁত হয় তবে ফিরে আসে False। ডকুমেন্টেশন বলছে এটি উইন্ডোতে কাজ করে (আমি এটি নিশ্চিত করতে পারি যে এটি ব্যক্তিগতভাবে লিনাক্সে কাজ করে)।

os.path.isabs(my_path)

1
এই ফাংশনটি ক্রস প্ল্যাটফর্ম নয়। ইউনিক্সে os.path.isabs('c:\\')মিথ্যা প্রত্যাবর্তন করে।
— অ্যানাটোলি টেকটোনিক

69
রটফ্ল, এবং এটি ভুয়া প্রত্যাবর্তন করা উচিত, যেহেতু সি: \\ ইউনিক্স সিস্টেমে একটি পরম পথ নয়। "/", "প্রথমেই / var / custApp /" ইত্যাদি :) মতো UNIX প্ল্যাটফর্মের শুরু উপর পরম পাথ
— Marek Lewandowski

29
@ টেকটোনিক এটি যে কেউ খুঁজে পেতে পারে এটি একেবারে পরিষ্কার করার জন্য: `সি: \ un ইউনিক্সে একটি সঠিক বৈধ ফাইল / ডিরেক্টরি নাম name সুতরাং, এটি সত্যই কোনও ইউনিক্স সিস্টেমে আপেক্ষিক পথ হবে। সুতরাং, ফাংশনটি ক্রস প্ল্যাটফর্ম। কারণ, এটি উইন্ডোজ এবং ইউনিক্সের বিশেষত্বগুলিকে বিবেচনা করে।
— লেমিং

1
যথাযথভাবে। এটি বিভিন্ন প্ল্যাটফর্মে একই আচরণ করে না, এটি বর্তমান প্ল্যাটফর্মের জন্য সঠিক উত্তর দেয়।
— কেভিন কক্স

প্রশ্নের উত্তর দিচ্ছি না। ক্রস-প্ল্যাটফর্মের নিয়মাবলী থাকতে 'ওএস.পাথ' এর পরিবর্তে 'এনটিপথ' বা 'পিক্সিকপথ' ব্যবহার করুন
— শোহম

43

এবং আপনি যদি যা চান তা হ'ল পরম পথ, এটি কিনা তা যাচাই করে বিরক্ত করবেন না, কেবল এটি পান abspath:

import os

print os.path.abspath('.')

7
এটি মূল প্রশ্নের উত্তর নাও দিতে পারে, তবে আমি এটি না বুঝে ঠিক কী খুঁজছিলাম। ধন্যবাদ!
— মফিস্টো



5

প্রকৃতপক্ষে আমি মনে করি উপরোক্ত উত্তরগুলির কোনওটিরই আসল সমস্যাটির সমাধান হয়নি: ক্রস প্ল্যাটফর্মের পথগুলি। ওস.পাথ যা করে তা হ'ল 'পাথ' লাইব্রেরির ওএস নির্ভরশীল সংস্করণটি লোড করা। সুতরাং সমাধানটি স্পষ্টভাবে প্রাসঙ্গিক (ওএস) পাথ লাইব্রেরি লোড করা হয়:

import ntpath
import posixpath

ntpath.isabs("Z:/a/b/c../../H/I/J.txt")
    True
posixpath.isabs("Z:/a/b/c../../H/I/J.txt")
    False

হ্যাঁ! প্রশ্নটিতে উইন্ডোজ এবং লিনাক্স উভয় পথেরই উল্লেখ করা হয়েছে! একটি দ্রুত def path_is_abs(p): return (len(p) > 1) and (p[0] == '/' or p[1] == ':')
— ওলাইনার

4

python 3.4 পাথলিব থেকে পাওয়া যায়।

In [1]: from pathlib import Path

In [2]: Path('..').is_absolute()
Out[2]: False

In [3]: Path('C:/').is_absolute()
Out[3]: True

In [4]: Path('..').resolve()
Out[4]: WindowsPath('C:/the/complete/path')

In [5]: Path('C:/').resolve()
Out[5]: WindowsPath('C:/')

1
এই উত্তরটি আসলে উইন্ডোজে কাজ করে .. Path('\tmp').is_absolute()সঠিকভাবে দেয় False, অন্যদিকে os.path.isabs('\tmp')ভুল দেয় True। (কেউ কেউ মনে করেন যে \tmpএটি উইন্ডোজে একটি চূড়ান্ত পথ, তবে এটি একটি নিখুঁত পাথের খুব অকেজো সংজ্ঞা জন্য সত্য ))
— জাইবাইল

0

অন্য কোনও উপায় যদি আপনি বর্তমান কার্যনির্বাহী ডিরেক্টরিতে না থাকেন তবে কৃপণ নষ্ট তবে এটি আমার পক্ষে কাজ করে।

import re
path = 'my/relative/path'
# path = '..my/relative/path'
# path = './my/relative/path'

pattern = r'([a-zA-Z0-9]|[.])+/'
is_ralative = bool(pattern)
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.