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


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.