পাইথনের OS.makedirs আমার পথে "~" বুঝতে পারে না


159

আমার পথে আমার একটু সমস্যা আছে।

এই কোড উদাহরণটি "some / some_dir" নামে কিছু ডিরেক্টরি তৈরি করে এবং বুঝতে পারি না যে আমি আমার হোম ডিরেক্টরিতে কিছু_ডির তৈরি করতে চেয়েছিলাম।

my_dir = "~/some_dir"
if not os.path.exists(my_dir):
    os.makedirs(my_dir)

নোট করুন এটি লিনাক্স-ভিত্তিক সিস্টেমে রয়েছে।

উত্তর:


277

আপনার টিলডে ম্যানুয়ালি প্রসারিত করতে হবে:

my_dir = os.path.expanduser('~/some_dir')

1
সুতরাং আমি os.path.expanduser ব্যবহার করি নি, এবং ওপি যা করেছে তা করেছে এবং পাইথন আমার বর্তমান ডিরেক্টরিতে "~" ডিরেক্টরি তৈরি করেছে। কীভাবে আমি সেই ডিরেক্টরি মুছতে পারি (প্রকৃত হোম ডিরেক্টরিটি সরিয়ে না দিয়ে)?
শুভ মিত্তাল

1
অন্যদের ভাবতে ভাবতে হ্যাপিমিতল @ আপনি কেবল ./আপনার বর্তমান ডিরেক্টরিটি উল্লেখ করতে এবং বর্তমান ডিরেক্টরিতে ./~থাকা ফোল্ডারটি সরাতে ব্যবহার করতে পারেন ~। নিরাপদ হতে, এটি সহজভাবে সম্পূর্ণ পাথ প্রদান করার সবচেয়ে সহজ আছে: rm -rf path/to/bad/dir/~
alkasm

বা কেবল একটি ব্যাকস্ল্যাশ দিয়ে rm \~
এড়িয়ে চলুন

71

রূপান্তর ~/some_dirকরার $HOME/some_dirবলা হয় সম্প্রসারণ টিল্ড ও একটি সাধারণ ইউজার ইন্টারফেস বৈশিষ্ট্য। ফাইল সিস্টেমটি এ সম্পর্কে কিছুই জানে না।

পাইথনে, এই বৈশিষ্ট্যটি os.path.expanduser দ্বারা প্রয়োগ করা হয় :

my_dir = os.path.expanduser("~/some_dir")

প্রকৃতপক্ষে, এবং কোনও ফাইল বা ডিরেক্টরি নামকরণ করা পুরোপুরি বৈধ ~। সুতরাং শেল হোম শর্টকাট অস্পষ্ট এবং আপনি যদি পারেন তবে সেরা এড়ানো হবে।
ববিনস

7
নোট করুন যে "./~" স্বরলিপিটি ব্যবহার করে টিলডে সম্প্রসারণ ঘটছে এমন সময়েও বর্তমান ডিরেক্টরিতে "~" নামের একটি ফাইল / দির একটির সিএন অ্যাক্সেস করতে পারে। এটি কাজ করে কারণ ~ প্রসারণ কেবল একটি ফাইলের নামের শুরুতে ঘটে। "-" বা অন্যান্য অক্ষরগুলির সাথে ফাইল নামগুলির শুরু করার জন্য এটি একটি সুবিধাজনক হ্যাক যা কমান্ড লাইন ইন্টারফেস দ্বারা বিশেষভাবে বিবেচিত হয়। আপনি বলতে পারেন আমি সম্ভবত খুব বেশি শেল স্ক্রিপ্ট হ্যাকিং করেছি।
ডিডিএ

The file system does not know anything about it.+1
বিন

15

এটি সম্ভবত কারণ পাইথন বাশ নয় এবং একই সম্মেলনগুলি অনুসরণ করে না। আপনি এটি ব্যবহার করতে পারেন:

homedir = os.path.expanduser('~')

0
from srblib import verify_folder

verify_folder('path/to/folder')

এটি অন্য কোনও ফোল্ডার তৈরি না করলে এটি একটি ফোল্ডার তৈরি করবে।

দ্রষ্টব্য : এটি পথে ফোল্ডারও তৈরি করবে (যদি প্রয়োজন হয়)

srb@srb-pc:~/hello$ ls
srb@srb-pc:~/hello$ python3 
>>> from srblib import verify_folder
>>> verify_folder('~/hello/A/B')
>>> exit()
srb@srb-pc:~/hello$ ls
A
srb@srb-pc:~/hello$ ls A
B
srb@srb-pc:~/hello$ 

এই ফাংশন মত কাজ করে mkdir -p path/to/folder


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