python - যবহ - বাংলায় পাইথন




কিভাবে পাইথন একটি ফাইল mime টাইপ খুঁজে? (11)

পাইথন bindings libmagic

এই বিষয়ে সকল ভিন্ন উত্তর খুব বিভ্রান্তিকর, তাই আমি libmagic এর বিভিন্ন বাঁধনের এই সংক্ষিপ্ত বিবরণ সহ আরও কিছু স্বচ্ছতা দেওয়ার আশা করছি। পূর্বে mammadori উপলব্ধ অপশন তালিকাভুক্ত একটি সংক্ষিপ্ত উত্তর দিয়েছেন।

libmagic

ফাইলগুলি মাইম-টাইপ নির্ধারণ করার সময়, পছন্দের সরঞ্জামটি কেবল file বলা হয় এবং এর ব্যাক- libmagic বলা libmagic । ( darwinsys.com/file ।) প্রকল্পটি একটি ব্যক্তিগত সিভিএস-সংগ্রহস্থলের মধ্যে উন্নত করা হয়েছে, তবে জিথব-এ কেবল একটি পঠনযোগ্য গিট মিরর রয়েছে

এখন এই টুলটি, যদি আপনি পাইথনের সাথে যে কোনও লিবম্যাগিক বাইন্ডিং ব্যবহার করতে চান তবে এটি ইতিমধ্যেই আপনার নিজস্ব পাইথন বাইন্ডিংগুলির সাথে file-magic নামে পরিচিত। তাদের জন্য অনেক ডেডিকেটেড ডকুমেন্টেশন নেই, তবে আপনি সি-লাইব্রেরির ম্যান পৃষ্ঠাতে একবার নজর রাখতে পারেন: man libmagic । মূল ব্যবহারটি https://github.com/file/file/tree/master/python বর্ণিত হয়েছে:

import magic

detected = magic.detect_from_filename('magic.py')
print 'Detected MIME type: {}'.format(detected.mime_type)
print 'Detected encoding: {}'.format(detected.encoding)
print 'Detected file type name: {}'.format(detected.name)

এছাড়া, উদাহরণস্বরূপ ফাইলের মধ্যে magic.open(flags) ব্যবহার করে আপনি একটি Magic বস্তু তৈরি করে লাইব্রেরীটি ব্যবহার করতে পারেন।

toivotuo এবং ewr2san উভয় file টুল file-magic অন্তর্ভুক্ত এই file-magic বাইন্ডিং ব্যবহার করে। তারা ভুলভাবে অনুমান করে, তারা python-magic প্যাকেজ ব্যবহার করছে। এটি ইঙ্গিত দেয় যে, যদি file এবং python-magic উভয় ইনস্টল করা হয়, তবে পাইথন মডিউল ম্যাজিকটি পূর্বের দিকে নির্দেশ করে।

পাইথন-জাদু

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

filemagic

দ্রষ্টব্য : ২013 সালে সর্বশেষ এই প্রকল্পটি আপডেট করা হয়েছিল!

একই সি-এপিআই ভিত্তিক থাকার কারণে, এই লাইব্রেরিতে libmagic file-magic সহ কিছু সাদৃশ্য রয়েছে। এটি শুধুমাত্র mammadori দ্বারা উল্লেখ করা হয় এবং অন্য কোন উত্তর এটি নিয়োগ।

বলুন আপনি কোথাও ফাইলগুলির একটি গুচ্ছ সংরক্ষণ করতে চান, উদাহরণস্বরূপ BLOB তে। ধরুন আপনি এই ফাইলগুলিকে একটি ওয়েব পৃষ্ঠার মাধ্যমে ডিশ করতে চান এবং ক্লায়েন্ট স্বয়ংক্রিয়ভাবে সঠিক অ্যাপ্লিকেশন / ভিউয়ার খুলতে চান।

ধারণা: HTTP প্রতিক্রিয়াতে মাইম-টাইপ (সামগ্রী-টাইপ?) শিরোনাম দ্বারা কোন অ্যাপ্লিকেশন / ভিউয়ার ব্যবহার করতে ব্রাউজার সনাক্ত করে।

সেই অনুমানের উপর ভিত্তি করে, ফাইলের বাইটের পাশাপাশি, আপনি MIME টাইপ সংরক্ষণ করতে চান।

কিভাবে আপনি একটি ফাইলের MIME টাইপ খুঁজে পাবেন? আমি বর্তমানে ম্যাকের উপর আছি, তবে উইন্ডোজ এও এটি কাজ করবে।

ওয়েব পেজে ফাইল পোস্ট করার সময় ব্রাউজার এই তথ্য যোগ করে?

এই তথ্য খোঁজার জন্য একটি নিখুঁত পাইথন লাইব্রেরি আছে? একটি ওয়েবসেবার বা (এমনকি ভাল) একটি ডাউনলোডযোগ্য ডাটাবেস?


3 টি বিভিন্ন লাইব্রেরি যা libmagic wraps আছে।

তাদের মধ্যে 2 পাইপিতে উপলব্ধ (তাই পিপ ইনস্টল কাজ করবে):

  • filemagic
  • পাইথন-জাদু

এবং অন্যটি, পাইথন-যাদুের মতোই সরাসরি সর্বশেষ libmagic উত্সগুলিতে পাওয়া যায় এবং সম্ভবত আপনার লিনাক্স বিতরণে এটি একটি।

ডেবিয়ানের প্যাকেজ পাইথন-ম্যাজিক এই সম্পর্কেই এবং এটি টিভোটুও হিসাবে ব্যবহৃত হয় এবং সাইমন জিমমারম্যান বলেছেন (IMHO) হিসাবে এটি অপঠিত হয় না।

আমার মনে হয় অন্য একটি গ্রহণ (libmagic মূল লেখক দ্বারা)।

খুব খারাপ পিপিআই সরাসরি পাওয়া যায় না।


আপনি imghdr পাইথন মডিউল ব্যবহার করতে পারেন।


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

বিকল্পভাবে, যদি আপনি একটি ইউনিক্স বক্সে বসে থাকেন তবে আপনি sys.popen('file -i ' + fileName, mode='r') ব্যবহার করতে পারেন MIME টাইপটি ধরতে। উইন্ডোজ একটি সমান কমান্ড থাকা উচিত, কিন্তু আমি এটা কি তা নিশ্চিত না।


এই খুব সহজ মনে হচ্ছে

>>> from mimetypes import MimeTypes
>>> import urllib 
>>> mime = MimeTypes()
>>> url = urllib.pathname2url('Upload.xml')
>>> mime_type = mime.guess_type(url)
>>> print mime_type
('application/xml', None)

ওল্ড পোস্ট পড়ুন দয়া করে



পাইথন 2.6:

mime = subprocess.Popen("/usr/bin/file --mime PATH", shell=True, \
    stdout=subprocess.PIPE).communicate()[0]

পাইথন 3.x এবং ফাইলটিতে url সহ ওয়েবপ্যাপ যা এক্সটেনশান বা একটি জাল এক্সটেনশান থাকতে পারে না। আপনি ব্যবহার করে পাইথন-যাদু ইনস্টল করা উচিত

pip3 install python-magic

ম্যাক ওএস এক্স এর জন্য, আপনি ব্যবহার করে libmagic ইনস্টল করা উচিত

brew install libmagic

টুকিটাকি সংকেতলিপি

import urllib
import magic
from urllib.request import urlopen

url = "http://...url to the file ..."
request = urllib.request.Request(url)
response = urlopen(request)
mime_type = magic.from_buffer(response.readline())
print(mime_type)

বিকল্পভাবে আপনি পড়া আকারে রাখতে পারে

import urllib
import magic
from urllib.request import urlopen

url = "http://...url to the file ..."
request = urllib.request.Request(url)
response = urlopen(request)
mime_type = magic.from_buffer(response.read(128))
print(mime_type)

বাইট অ্যারের টাইপের জন্য আপনি magic.from_buffer ব্যবহার করতে পারেন (_byte_array, mime = true)


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


2017 আপডেট

গিথুবে যেতে হবে না, এটি পিপিপিতে ভিন্ন নামের অধীনে রয়েছে:

pip3 install --user python-magic
# or:
sudo apt install python3-magic  # Ubuntu distro package

কোড পাশাপাশি সরলীকৃত করা যাবে:

>>> import magic

>>> magic.from_file('/tmp/img_3304.jpg', mime=True)
'image/jpeg'




mime