উত্তর:
>>> import os
>>> os.path.abspath("mydir/myfile.txt")
'C:/example/cwd/mydir/myfile.txt'
এটি ইতিমধ্যে পরম পাথ থাকলেও কাজ করে:
>>> import os
>>> os.path.abspath("C:/example/cwd/mydir/myfile.txt")
'C:/example/cwd/mydir/myfile.txt'
normpath()
নিম্নরূপ: normpath(join(os.getcwd(), path))
। সুতরাং যদি এর mydir/myfile.txt
অধীনে না হয় os.getcwd()
তবে পরম পথটি আসল পথ নয় ।
mydir/myfile.txt
পরোক্ষভাবে সাম্প্রতিক কাজ করা ভিতরে একটি পাথ বোঝায় যেমন অতএব সমতূল্য ./mydir/myfile.txt
। আপনি যে পথটি ইনপুট করতে চেয়েছিলেন সেটি সেই পথ নাও হতে পারে তবে আমি যতদূর বলতে পারি পথের সঠিক ব্যাখ্যার মতো মনে হচ্ছে। আপনি বিস্তারিত বলতে পারেন?
abspath
ফাংশনের সাথে একটি আসল ফাইলের সাথে কোনও যোগসূত্র নেই । আপনি যে কোনও পথের নাম দিতে পারেন non অস্তিত্বহীন ফাইল এবং ডিরেক্টরি হেরার্চগুলি ভাল - এবং অ্যাবসপাথ কেবল পথের বিটগুলি সমাধান করবে (প্যারেন্ট ডিরেক্টরি ..
উপাদান সহ ) এবং একটি স্ট্রিং ফিরিয়ে দেবে। এটি বর্তমান ডিরেক্টরি থেকে গণিত একটি স্ট্রিং; একটি আসল ফাইলের সাথে কোনও সম্পর্কটি দুর্ঘটনাজনক, মনে হয়। ব্যবহার করে দেখুন os.path.abspath("/wow/junk/../blha/hooey")
। এটা কাজ করে।
os.path.exists
। বিপরীতে, পাওয়ারশেলের মতো সিস্টেমগুলি যে স্ট্যান্ডার্ড পাথ রেজোলিউশন ফাংশন সহ বিদ্যমান পাথের উপর জোর দেয় তা ব্যবহারের জন্য ব্যথা।
relpath
: "অস্তিত্ব বা প্রকৃতির বিষয়টি নিশ্চিত করতে ফাইল সিস্টেম অ্যাক্সেস করা হয় না path
"। যদি এখানে যুক্তি সুস্পষ্ট হয় তবে কেন স্পষ্ট হবে relpath
?
আপনি নতুন পাইথন ৩.৪ লাইব্রেরিটি ব্যবহার করতে পারেন pathlib
। (আপনি পাইথন ২.6 বা ২.7 ব্যবহার করে এটিও পেতে পারেন pip install pathlib
।) লেখকরা লিখেছেন : "এই লাইব্রেরির লক্ষ্য হ'ল ফাইল-সিস্টেমের পথগুলি পরিচালনা করার জন্য ক্লাসগুলির একটি সাধারণ স্তরক্রম সরবরাহ করা এবং সাধারণ ক্রিয়াকলাপ ব্যবহারকারীরা তাদের উপর যা করেন do"
উইন্ডোজে একটি নিখুঁত পাথ পেতে:
>>> from pathlib import Path
>>> p = Path("pythonw.exe").resolve()
>>> p
WindowsPath('C:/Python27/pythonw.exe')
>>> str(p)
'C:\\Python27\\pythonw.exe'
অথবা ইউনিক্সে:
>>> from pathlib import Path
>>> p = Path("python3.4").resolve()
>>> p
PosixPath('/opt/python3/bin/python3.4')
>>> str(p)
'/opt/python3/bin/python3.4'
দস্তাবেজগুলি এখানে রয়েছে: https://docs.python.org/3/library/pathlib.html
os.path.abspath()
আমাকে একটি ত্রুটি দিয়েছেন: AttributeError: 'NoneType' object has no attribute 'startswith'
ব্যবহার Path().resolve()
একই আপেক্ষিক filepath সঙ্গে নেই। (লিনাক্স এবং পাইথন 3.4)
আরও ভাল, মডিউলটি ইনস্টল করুন (পাওয়া গেছে PyPI
), এটি সমস্ত os.path
ফাংশন এবং অন্যান্য সম্পর্কিত ফাংশনগুলিকে এমন কোনও অবজেক্টের পদ্ধতিতে মোড়ানো করে যেখানে স্ট্রিং ব্যবহার করা যায় সেখানে ব্যবহার করা যেতে পারে:
>>> from path import path
>>> path('mydir/myfile.txt').abspath()
'C:\\example\\cwd\\mydir\\myfile.txt'
>>>
pathlib
। আমার উত্তরটি এই থ্রেডে দেখুন।
from path import Path
তখন হতে হবেPath('mydir/myfile.txt').abspath()
path
মডিউল ব্যবহার করছেন । সংযুক্ত মডিউল নামের একটি শ্রেণি ব্যবহার করে path
।
আজ আপনি সেই unipath
প্যাকেজটিও ব্যবহার করতে পারেন যা ভিত্তিক ছিল path.py
: http://sluggo.scrapping.cc/python/unipath/
>>> from unipath import Path
>>> absolute_path = Path('mydir/myfile.txt').absolute()
Path('C:\\example\\cwd\\mydir\\myfile.txt')
>>> str(absolute_path)
C:\\example\\cwd\\mydir\\myfile.txt
>>>
আমি এই প্যাকেজটি ব্যবহার করার পরামর্শ দেব কারণ এটি সাধারণ os.path ইউটিলিটিগুলিতে একটি পরিষ্কার ইন্টারফেস দেয় ।
পাইথন ৩.৪+ এর জন্য আপডেট pathlib
যা আসলে প্রশ্নের উত্তর দেয়:
from pathlib import Path
relative = Path("mydir/myfile.txt")
absolute = relative.absolute() # absolute is a Path object
আপনার যদি কেবল অস্থায়ী স্ট্রিংয়ের প্রয়োজন হয় তবে মনে রাখবেন যে অবশ্যই আপনি অবশ্যই সম্পর্কিত সহ Path
সমস্ত প্রাসঙ্গিক ফাংশন os.path
সহ অবজেক্টগুলি ব্যবহার করতে পারেন abspath
:
from os.path import abspath
absolute = abspath(relative) # absolute is a str object
import os
os.path.abspath(os.path.expanduser(os.path.expandvars(PathNameString)))
নোট expanduser
(ফাইলটি (বা ডিরেক্টরি) নাম এবং অবস্থানের জন্য প্রদত্ত এক্সপ্রেশনটিতে একটি শীর্ষস্থানীয় ~/
(টিল্ড ব্যবহারকারীর হোম ডিরেক্টরি বোঝায় ) থাকতে পারে এবং expandvars
অন্য যে কোনও পরিবেশের ভেরিয়েবলের (যেমন $HOME
) যত্ন নিবে সে ক্ষেত্রে (ইউনিক্সে) নোটটি অবশ্যই প্রয়োজনীয় Note
এটি অন্য স্ক্রিপ্টের মধ্যে থেকে কল করা হলেও এটি সর্বদা বর্তমান স্ক্রিপ্টের সঠিক ফাইলের নাম পায়। এটি ব্যবহার করার সময় বিশেষভাবে কার্যকর subprocess
।
import sys,os
filename = sys.argv[0]
সেখান থেকে আপনি এখানে স্ক্রিপ্টের পুরো পথটি পেতে পারেন:
>>> os.path.abspath(filename)
'/foo/bar/script.py'
/..
ডিরেক্টরিগুলির স্তরক্রমের ক্ষেত্রে আপনি যতবার 'আপ' যেতে চান কেবল ততবার যোগ করে ফোল্ডারগুলি নেভিগেট করা সহজ করে তোলে ।
সিডব্লিউডি পেতে:
>>> os.path.abspath(filename+"/..")
'/foo/bar'
মূল পথের জন্য:
>>> os.path.abspath(filename+"/../..")
'/foo'
"/.."
অন্যান্য ফাইলের নামের সাথে একত্রিত হয়ে আপনি সিস্টেমের যে কোনও ফাইল অ্যাক্সেস করতে পারবেন।
মডিউল os
অ্যাবস পাথ সন্ধানের জন্য একটি উপায় সরবরাহ করে।
তবে লিনাক্সের বেশিরভাগ পাথই~
(টিলডে) দিয়ে শুরু হয় , যা সন্তোষজনক ফলাফল দেয় না।
যাতে আপনি এটি srblib
জন্য ব্যবহার করতে পারেন ।
>>> import os
>>> os.path.abspath('~/hello/world')
'/home/srb/Desktop/~/hello/world'
>>> from srblib import abs_path
>>> abs_path('~/hello/world')
'/home/srb/hello/world'
এটি ব্যবহার করে ইনস্টল করুন python3 -m pip install srblib
আমি গ্লোব ব্যবহার করতে পছন্দ করি
আপনার বর্তমান ফোল্ডারে কীভাবে সমস্ত ফাইল প্রকার তালিকাভুক্ত করা যায় তা এখানে:
import glob
for x in glob.glob():
print(x)
আপনার বর্তমান ফোল্ডারে কীভাবে সমস্ত (উদাহরণস্বরূপ) .txt ফাইলগুলি তালিকাভুক্ত করবেন তা এখানে রয়েছে:
import glob
for x in glob.glob('*.txt'):
print(x)
এখানে একটি চয়ন করা ডিরেক্টরিতে সমস্ত ফাইলের ধরন তালিকাভুক্ত করা হয়:
import glob
for x in glob.glob('C:/example/hi/hello/'):
print(x)
আশা করি এটি আপনাকে সাহায্য করবে
os.path.abspath()
যে কোনও আপেক্ষিক পথ glob
সরবরাহ করতে পারে তার সঠিক উত্তর ( ) প্রয়োগ করতে পারে ...
আপনি যদি একটি ম্যাক হয়
import os
upload_folder = os.path.abspath("static/img/users")
এটি আপনাকে একটি পুরো পথ দেবে:
print(upload_folder)
নিম্নলিখিত পথ প্রদর্শন করবে:
>>>/Users/myUsername/PycharmProjects/OBS/static/img/user