পাইথনে, কোনও সার্ভারে সংরক্ষণ করা কোনও ফাইল (নাম) প্রিপেন্ড করার জন্য কিছু র্যান্ডম পাঠ্য উত্সর্গ করার সর্বোত্তম উপায় বা কেবল এটির ওভাররাইট না ঘটে তা নিশ্চিত করার জন্য way ধন্যবাদ!
উত্তর:
পাইথনের অস্থায়ী ফাইলের নাম উত্পন্ন করার সুবিধা রয়েছে, দেখুন http://docs.python.org/library/tempfile.html । এই ক্ষেত্রে:
In [4]: import tempfile
প্রতিটি কল tempfile.NamedTemporaryFile()
পৃথক টেম্প ফাইলের ফলাফলের জন্য আসে এবং এর নামটি .name
বৈশিষ্ট্য সহ অ্যাক্সেস করা যায় , যেমন:
In [5]: tf = tempfile.NamedTemporaryFile()
In [6]: tf.name
Out[6]: 'c:\\blabla\\locals~1\\temp\\tmptecp3i'
In [7]: tf = tempfile.NamedTemporaryFile()
In [8]: tf.name
Out[8]: 'c:\\blabla\\locals~1\\temp\\tmpr8vvme'
আপনার অনন্য ফাইলের নামটি হ'ল এটি কোনও নিয়মিত ফাইলের মতো ব্যবহার করা যেতে পারে। দ্রষ্টব্য : ডিফল্টরূপে ফাইলটি বন্ধ হয়ে গেলে মুছে ফেলা হবে। তবে, যদি delete
প্যারামিটারটি মিথ্যা হয় তবে ফাইলটি স্বয়ংক্রিয়ভাবে মোছা হবে না।
সম্পূর্ণ পরামিতি সেট:
tempfile.NamedTemporaryFile([mode='w+b'[, bufsize=-1[, suffix=''[, prefix='tmp'[, dir=None[, delete=True]]]]]])
অস্থায়ী ফাইলের উপসর্গটি নির্দিষ্ট করাও সম্ভব (ফাইল তৈরির সময় সরবরাহ করা যেতে পারে এমন বিভিন্ন পরামিতিগুলির একটি হিসাবে):
In [9]: tf = tempfile.NamedTemporaryFile(prefix="zz")
In [10]: tf.name
Out[10]: 'c:\\blabla\\locals~1\\temp\\zzrc3pzk'
অস্থায়ী ফাইলগুলির সাথে কাজ করার জন্য অতিরিক্ত উদাহরণগুলি এখানে পাওয়া যাবে
আপনি এলোমেলো স্ট্রিং তৈরির জন্য ইউআইডি মডিউলটি ব্যবহার করতে পারেন :
import uuid
filename = str(uuid.uuid4())
এটি একটি বৈধ পছন্দ, প্রদত্ত যে কোনও ইউইউডি জেনারেটরের নকল শনাক্তকরণ (একটি ফাইলের নাম, এই ক্ষেত্রে) উত্পাদন করার সম্ভাবনা খুব কম:
পরের 100 বছরের জন্য প্রতি সেকেন্ডে 1 বিলিয়ন ইউইউডি উত্পন্ন করার পরে, কেবলমাত্র একটি নকল তৈরির সম্ভাবনা প্রায় 50% হবে। পৃথিবীর প্রতিটি ব্যক্তি 600০০ মিলিয়ন ইউইউডির মালিক হলে একটি সদৃশ হওয়ার সম্ভাবনা প্রায় 50% হবে।
uuid.uuid4().hex
ড্যাশ ( -
) ছাড়াই একটি হেক্স স্ট্রিং পেতে ব্যবহার করুন ।
একটি সাধারণ পদ্ধতির অর্থ ফাইলের সাথে কিছুকালীন সম্পর্ক রাখতে ফাইলের নামের সাথে একটি উপসর্গ / প্রত্যয় হিসাবে টাইমস্ট্যাম্প যুক্ত করা। আপনার যদি আরও স্বতন্ত্রতার প্রয়োজন হয় তবে আপনি এটিতে এলোমেলো স্ট্রিং যোগ করতে পারেন।
import datetime
basename = "mylogfile"
suffix = datetime.datetime.now().strftime("%y%m%d_%H%M%S")
filename = "_".join([basename, suffix]) # e.g. 'mylogfile_120508_171442'
1. Test if file exists, 2. create file.
যদি অন্য কোনও প্রক্রিয়া যদি আপনার 1 এবং 2 পদক্ষেপের মধ্যে বাধা দেয় এবং ফাইলটি তৈরি করে, যখন আপনার কোডটি পুনরায় শুরু হবে এটি অন্যান্য প্রক্রিয়া ফাইলটি ওভাররাইট করে দেবে।
tempfile
মডিউলটি ব্যবহার করতে পারেন যা এটি আপনার জন্য পরিচালনা করে। :)
...strftime("%y%m%d_%H%M%S%f")
ওপি র্যান্ডম ফাইল নয় র্যান্ডম ফাইল নামগুলি তৈরি করার জন্য অনুরোধ করেছে । টাইমস এবং ইউইউডিগুলির মধ্যে সংঘর্ষ হতে পারে। আপনি যদি একটি একক মেশিনে কাজ করছেন (কোনও ভাগ করা ফাইল সিস্টেম নয়) এবং আপনার প্রক্রিয়া / থ্রেড নিজেই স্ট্যাম্প না রাখে তবে নিজের পিআইডি পেতে os.getpid () ব্যবহার করুন এবং এটি একটি অনন্য ফাইলের নামের উপাদান হিসাবে ব্যবহার করুন। অন্যান্য প্রক্রিয়াগুলি অবশ্যই একই পিআইডি পাবে না। যদি আপনি মাল্টিথ্রেড হয় তবে থ্রেড আইডিটি পান। যদি আপনার কোডের অন্যান্য দিকগুলি থাকে যেখানে একটি একক থ্রেড বা প্রক্রিয়া একাধিক বিভিন্ন টেম্পাইলগুলি তৈরি করতে পারে তবে আপনার অন্য কৌশলটি ব্যবহার করার প্রয়োজন হতে পারে। একটি ঘূর্ণায়মান সূচক কাজ করতে পারে (আপনি যদি এগুলি এত দিন রাখছেন না বা এতগুলি ফাইল ব্যবহার করছেন না যা আপনি রোলওভার সম্পর্কে চিন্তিত হবেন)। "অ্যাক্টিভ" ফাইলগুলিতে একটি গ্লোবাল হ্যাশ / সূচক রাখা সেই ক্ষেত্রে যথেষ্ট।
দীর্ঘমেয়াদী ব্যাখ্যার জন্য দুঃখিত, তবে এটি আপনার সঠিক ব্যবহারের উপর নির্ভর করে।
আপনার যদি ফাইলের পথের প্রয়োজন না হয় তবে কেবল পূর্বনির্ধারিত দৈর্ঘ্যের র্যান্ডম স্ট্রিংয়ের সাহায্যে আপনি এ জাতীয় কিছু ব্যবহার করতে পারেন।
>>> import random
>>> import string
>>> file_name = ''.join(random.choice(string.ascii_lowercase) for i in range(16))
>>> file_name
'ytrvmyhkaxlfaugx'
আপনি যদি নতুন ফাইলনামের অংশ হিসাবে মূল ফাইলনাম সংরক্ষণ করতে চান তবে বর্তমান সময়ের MD5 হ্যাশ ব্যবহার করে অভিন্ন দৈর্ঘ্যের অনন্য উপসর্গগুলি তৈরি করা যেতে পারে:
from hashlib import md5
from time import localtime
def add_prefix(filename):
prefix = md5(str(localtime()).encode('utf-8')).hexdigest()
return f"{prefix}_{filename}"
অ্যাড_প্রিফিক্স ('স্টাইল। সিএসএস') এ কলগুলি এর মতো ক্রম উত্পন্ন করে:
a38ff35794ae366e442a0606e67035ba_style.css
7a5f8289323b0ebfdbc7c840ad3cb67b_style.css
আমার দুটি সেন্ট এখানে যুক্ত করা হচ্ছে:
In [19]: tempfile.mkstemp('.png', 'bingo', '/tmp')[1]
Out[19]: '/tmp/bingoy6s3_k.png'
টেম্পিল ফাইলের জন্য অজগর ডক অনুসারে .mkstemp, এটি সর্বাধিক সুরক্ষিত পদ্ধতিতে একটি অস্থায়ী ফাইল তৈরি করে। এই কলের পরে ফাইলটি উপস্থিত থাকবে দয়া করে নোট করুন:
In [20]: os.path.exists(tempfile.mkstemp('.png', 'bingo', '/tmp')[1])
Out[20]: True
আমি ব্যক্তিগতভাবে আমার পাঠ্যটি কেবল এলোমেলো / অনন্য নয় তবে সুন্দর হতেও পছন্দ করি, এজন্যই আমি হ্যাশডস পছন্দ করি, যা পূর্ণসংখ্যার থেকে সুন্দর দেখাচ্ছে র্যান্ডম পাঠ্য উত্পন্ন করে। মাধ্যমে ইনস্টল করতে পারেন
pip install hashids
স্নিপেট:
import hashids
hashids = hashids.Hashids(salt="this is my salt", )
print hashids.encode(1, 2, 3)
>>> laHquq
ছোট বিবরণ:
হ্যাশিডগুলি একটি ছোট ওপেন সোর্স লাইব্রেরি যা সংখ্যার থেকে সংক্ষিপ্ত, স্বতন্ত্র, অ-অনুক্রমিক আইডি উত্পন্ন করে।
import uuid
imageName = '{}{:-%Y%m%d%H%M%S}.jpeg'.format(str(uuid.uuid4().hex), datetime.now())
আপনি এলোমেলো প্যাকেজটি ব্যবহার করতে পারেন:
import random
file = random.random()