পাইথনে অস্থায়ী ডিরেক্টরি পাওয়ার ক্রস প্ল্যাটফর্মের উপায়


254

tempপাইথন ২.6-তে ডিরেক্টরিটি পাওয়ার কোনও ক্রস-প্ল্যাটফর্ম উপায় আছে ?

উদাহরণস্বরূপ, লিনাক্সের /tmpঅধীনে যা XP এর অধীনে থাকবেC:\Documents and settings\[user]\Application settings\Temp


পাইথনিস্ট নয়, তবে অস্থায়ী ফাইল / ডিরেক্টরি তৈরি করার জন্য আপনার এই পদ্ধতিগুলি ব্যবহার করা উচিত
skrat

1
Docs.python.org/library/tempfile.html এ টেম্পাইল ফাইলটি মডিউলটি দেখুন ।
জর্দান পারমার

উত্তর:


378

এটি অস্থিরতা মডিউল হবে।

অস্থায়ী ডিরেক্টরি পাওয়ার জন্য এটির কার্যকারিতা রয়েছে এবং এতে নাম বা নামবিহীন নামে অস্থায়ী ফাইল এবং ডিরেক্টরিগুলি তৈরি করতে কিছু শর্টকাটও রয়েছে।

উদাহরণ:

import tempfile

print tempfile.gettempdir() # prints the current temporary directory

f = tempfile.TemporaryFile()
f.write('something on temporaryfile')
f.seek(0) # return to beginning of file
print f.read() # reads data back from the file
f.close() # temporary file is automatically deleted here

সম্পূর্ণতার জন্য, ডকুমেন্টেশন অনুযায়ী এটি কীভাবে অস্থায়ী ডিরেক্টরিটি অনুসন্ধান করে তা এখানে:

  1. TMPDIRপরিবেশের পরিবর্তনশীল দ্বারা পরিচালিত ডিরেক্টরি ।
  2. TEMPপরিবেশের পরিবর্তনশীল দ্বারা পরিচালিত ডিরেক্টরি ।
  3. TMPপরিবেশের পরিবর্তনশীল দ্বারা পরিচালিত ডিরেক্টরি ।
  4. প্ল্যাটফর্ম-নির্দিষ্ট অবস্থান:
    • উপর RiscOS , ডিরেক্টরির নামে Wimp$ScrapDirএনভায়রনমেন্ট ভেরিয়েবল।
    • উপর উইন্ডোজ , ডিরেক্টরি C:\TEMP, C:\TMP, \TEMP, এবং \TMP, যাতে।
    • সব অন্যান্য প্ল্যাটফর্মের, ডিরেক্টরি উপর /tmp, /var/tmpএবং /usr/tmp, যাতে।
  5. একটি সর্বশেষ অবলম্বন হিসাবে, বর্তমান ওয়ার্কিং ডিরেক্টরি।

7
আমার জন্য, ওএসএক্স /var/folders/<garbage/here>পরিবর্তে এটি লাগিয়েছে /tmpকারণ এটি $TMPDIRসেট করা আছে। এখানে দেখুন ।
রিক স্মিথ

3
বর্তমানে, উইন্ডোজ 10 এ অজগর 3.6.5 এর সাথে tempfile.gettempdir()সমাধান করে C:\users\user\AppData\Local\Temp। দুর্ভাগ্যক্রমে দীর্ঘ পথ।
20 এ 17

61

এটি আপনার যা করা উচিত তা করা উচিত:

print tempfile.gettempdir()

আমার উইন্ডোজ বাক্সে আমার কাছে,

c:\temp

এবং আমার লিনাক্স বাক্সে আমি পেয়েছি:

/tmp

15

আমি ব্যবহার করি:

from pathlib import Path
import platform
import tempfile

tempdir = Path("/tmp" if platform.system() == "Darwin" else tempfile.gettempdir())

এটি ম্যাকওএসের উপর, অর্থাত ডারউইনের উপর, tempfile.gettempdir()এবং os.getenv('TMPDIR')যেমন একটি মান ফেরত দেয় '/var/folders/nj/269977hs0_96bttwj2gs_jhhp48z54/T'; এটি এমন একটি যা আমি সবসময় চাই না।


1
কমপক্ষে এই ক্ষেত্রে ম্যাকোস আপনাকে ব্যবহারকারী-স্তরের বিচ্ছিন্ন টেম্প ডিরেক্টরিটি ফিরিয়ে দেওয়ার সঠিক কাজ করে। আমি 99.99% নিশ্চিত যে এটি আপনার প্রয়োজন যা .... যদি না আপনি অপারেটিং সিস্টেমের সাথে গোলযোগ করতে চান।
সোরিন

1
@ সোরিন 99.99% একটি প্রসারিত। আমি বলব 50% আরও বাস্তববাদী। প্রায়শই আমি মাল্টিপ্রসেসিংয়ের সাথে কাজ করি এবং তারপরে আমি সমস্ত প্রক্রিয়াটির জন্য একই টেম্প ডির চাইতাম।
একিউম্যানাস

11

@ নসক্লোর মন্তব্য এবং উত্তরের উপর ভিত্তি করে সরলতম উপায় :

import tempfile
tmp = tempfile.mkdtemp()

তবে আপনি যদি নিজে থেকেই ডিরেক্টরিগুলি তৈরি করতে চান:

import os
from tempfile import gettempdir
tmp = os.path.join(gettempdir(), '.{}'.format(hash(os.times())))
os.makedirs(tmp)

আপনি যখন কাজটি সম্পন্ন করেন (গোপনীয়তা, সংস্থানসমূহ, সুরক্ষা, যাই হোক না কেন) এর সাথে আপনি নিজের পরে সহজেই পরিষ্কার করতে পারেন:

from shutil import rmtree
rmtree(tmp, ignore_errors=True)

এটি গুগল ক্রোম এবং লিনাক্সের মতো অ্যাপ্লিকেশনগুলির মতো systemd। তাদের উপস্থিতি "বিজ্ঞাপন" দেওয়ার জন্য তারা কেবল একটি সংক্ষিপ্ত হেক্স হ্যাশ এবং একটি অ্যাপ্লিকেশন-নির্দিষ্ট উপসর্গ ব্যবহার করে।


1
tempfile.mkdtemp()পরিবর্তে আপনার ব্যবহার করা উচিত
নসক্লো

@ ননস্ক্লো, এটি অবশ্যই একটি বিকল্প, এবং টেম্পাইল ফাইলের প্যাকেজটিতে নির্মিত সমস্ত দৃ .়তার সুযোগ নেবে তবে হ্যাশ পদ্ধতির সাহায্যে আপনার পছন্দসই পথ তৈরি করতে পারে এবং আপনার প্রয়োজনীয়তা পূরণ করে এমন একটি ডিরেক্টরি ট্রিতে নীড়ের একাধিক ডিরেক্টরি তৈরি করতে পারে। এটি মূলত mkdtemp()আপনার প্রস্তাবিত একটি আরও স্পষ্ট, আরও নমনীয় সংস্করণ ।
hobs
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.