পাইথনে ফাইলপথের একটি ডিরেক্টরি (একটি ডিরেক্টরি) বের করুন


162

আমাকে একটি নির্দিষ্ট পথে অভিভাবকত্বের ডিরেক্টরিটি বের করতে হবে। এটি দেখতে এটির মতো:

c:\stuff\directory_i_need\subdir\file

আমি "ফাইল" এর বিষয়বস্তু এমন কিছু দিয়ে পরিবর্তন করছি যা এতে directory_i_needনাম ব্যবহার করে (পথ নয়)। আমি একটি ফাংশন তৈরি করেছি যা আমাকে সমস্ত ফাইলের একটি তালিকা দেবে এবং তারপরে ...

for path in file_list:
   #directory_name = os.path.dirname(path)   # this is not what I need, that's why it is commented
   directories, files = path.split('\\')

   line_replace_add_directory = line_replace + directories  
   # this is what I want to add in the text, with the directory name at the end 
   # of the line.

আমি এটা কিভাবে করবো?


1
: আপনি এই উত্তর চেক করতে চাইবেন stackoverflow.com/a/4580931/311220
ওক গাছের ফল

উপরের লিঙ্কটি আমাকে বুঝতে ভুল করেছিল যে আমি কী ভুল করেছি তা ঠিক করতে। ধন্যবাদ.
থালিয়া

উত্তর:


236
import os
## first file in current dir (with full path)
file = os.path.join(os.getcwd(), os.listdir(os.getcwd())[0])
file
os.path.dirname(file) ## directory of file
os.path.dirname(os.path.dirname(file)) ## directory of directory of file
...

এবং আপনি এটি যতবার প্রয়োজন ততবার চালিয়ে যেতে পারেন ...

সম্পাদনা করুন: os.path থেকে , আপনি os.path.split বা os.path.basename ব্যবহার করতে পারেন:

dir = os.path.dirname(os.path.dirname(file)) ## dir of dir of file
## once you're at the directory level you want, with the desired directory as the final path node:
dirname1 = os.path.basename(dir) 
dirname2 = os.path.split(dir)[1] ## if you look at the documentation, this is exactly what os.path.basename does.

এটি পথের অংশগুলি বের করে - তবে কীভাবে পথ থেকে প্রকৃত ডিরেক্টরি নামটি বের করতে হয় তা আমি জানি না।
থালিয়া

42

পাইথন ৩.৪-তে আপনি পাথলিব মডিউলটি ব্যবহার করতে পারেন :

>>> from pathlib import Path
>>> p = Path('C:\Program Files\Internet Explorer\iexplore.exe')
>>> p.name
'iexplore.exe'
>>> p.suffix
'.exe'
>>> p.root
'\\'
>>> p.parts
('C:\\', 'Program Files', 'Internet Explorer', 'iexplore.exe')
>>> p.relative_to('C:\Program Files')
WindowsPath('Internet Explorer/iexplore.exe')
>>> p.exists()
True

এপিআই-এর দুর্দান্ত বিক্ষোভ
নাদিম ফারহাত

এটি পাইথনের পুরানো সংস্করণগুলিতে ব্যাকপোর্ট করা হয়েছে: প্যাথলিব 2
ফিনিক্স

11

আপনি parentযদি ব্যবহার করেন তবে আপনার প্রয়োজন সমস্ত অংশ pathlib

from pathlib import Path
p = Path(r'C:\Program Files\Internet Explorer\iexplore.exe')
print(p.parent) 

আউটপুট দেবে:

C:\Program Files\Internet Explorer    

কেস আপনার সমস্ত অংশ প্রয়োজন (ইতিমধ্যে অন্যান্য উত্তরে আবৃত) ব্যবহার করুন parts:

p = Path(r'C:\Program Files\Internet Explorer\iexplore.exe')
print(p.parts) 

তারপরে আপনি একটি তালিকা পাবেন:

('C:\\', 'Program Files', 'Internet Explorer', 'iexplore.exe')

সময়ের সুর বাঁচায়।


5

প্রথমে দেখুন আপনার splitunc()মধ্যে কোনও উপলব্ধ ফাংশন রয়েছে কিনা os.path। প্রথম আইটেমটি ফিরিয়ে দেওয়া উচিত যা আপনি চান তা করা উচিত ... তবে আমি লিনাক্সে আছি এবং যখন আমি আমদানি করি osএবং এটি ব্যবহার করার চেষ্টা করি তখন আমার এই ফাংশনটি হয় না।

অন্যথায়, একটি অর্ধ-কুৎসিত উপায় যা কাজটি করে তা হ'ল:

>>> pathname = "\\C:\\mystuff\\project\\file.py"
>>> pathname
'\\C:\\mystuff\\project\\file.py'
>>> print pathname
\C:\mystuff\project\file.py
>>> "\\".join(pathname.split('\\')[:-2])
'\\C:\\mystuff'
>>> "\\".join(pathname.split('\\')[:-1])
'\\C:\\mystuff\\project'

যা ফাইলের ঠিক উপরে ডিরেক্টরিটি এবং তার ঠিক উপরে ডিরেক্টরিটি পুনরুদ্ধার দেখায়।


আমি আরএসপ্লিটের ব্যবহার দেখানোর জন্য আমার এন্ট্রি সম্পাদনা করেছি যা আপনার পরামর্শ অনুসারে কাজ করে - তবে এখনও আমাকে কেবল ডিরেক্টরি নামটিই দেয় না।
থালিয়া

1
আপনি কী জিজ্ঞাসা করছেন তা আমি এখনও পরিষ্কার করছি না। আপনি কেন পরবর্তী উচ্চতর উদাহরণের বামে সবকিছু ছিনিয়ে রাখবেন না \\ তারপরে? আপনি পথটি চান এমন ভান করুন, তারপরে আপনি যখন এটি split এ ভাগ করবেন তখন কেবল তার শেষ এন্ট্রি রাখুন \\ এই কাজ করা উচিত, না?
ely

আমি পথটি বিভক্ত করে শেষ করেছিলাম এবং আমি যে টুকরোটি চেয়েছিলাম তা নিয়েছিলাম, এটি আগে কাজ করে না তবে এই সমস্ত উত্তর পড়ার পরে, আমি কী ভুল করেছি তা জানতে পেরেছিলাম।
থালিয়া

যদি উত্তরগুলি পড়তে আপনাকে সহায়তা করে থাকে তবে কমপক্ষে সেগুলি আপ-ভোটিংয়ের বিষয়ে বিবেচনা করুন এবং সম্ভবত সেগুলির মধ্যে একটি গ্রহণ করার বিষয়টি বিবেচনা করুন। আপনি খুশি যদিও আপনি ত্রুটি চিহ্নিত করেছেন।
এলী

আমি এই অর্ধ-কুৎসিত ভাবে যেভাবে কাজ করে তা পছন্দ করি। আমি একটি সাধারণ os.sep দ্বারা "\\" পরিবর্তন করি এবং এটি একটি পথের একটি ভগ্নাংশ পুনরুদ্ধারে পুরোপুরি কাজ করে।
তাজারও

1

ডিরেক্টরিটির টুকরোটি বের করতে আমি এটিই করেছি:

for path in file_list:
  directories = path.rsplit('\\')
  directories.reverse()
  line_replace_add_directory = line_replace+directories[2]

আপনার সাহায্যের জন্য ধন্যবাদ।


0
import os

directory = os.path.abspath('\\') # root directory
print(directory) # e.g. 'C:\'

directory = os.path.abspath('.') # current directory
print(directory) # e.g. 'C:\Users\User\Desktop'

parent_directory, directory_name = os.path.split(directory)
print(directory_name) # e.g. 'Desktop'
parent_parent_directory, parent_directory_name = os.path.split(parent_directory)
print(parent_directory_name) # e.g. 'User'

এটিও কৌশলটি করা উচিত।


-1

আপনাকে os.path.split এর প্যারামিটার হিসাবে পুরো পথটি রাখতে হবে। দস্তাবেজগুলি দেখুন । এটি স্ট্রিং বিভাজনের মতো কাজ করে না।


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