Merhaba Değerli Forum Üyeleri,
Bugün sizlerle, dosya türlerini ve içeriklerini analiz edebilen bir Python kodu yazacağız. Kod, dosyaların türlerini belirlemek, boyutlarını öğrenmek, son değiştirilme tarihlerini görmek ve detaylı bir şekilde format analizleri yapmak için çeşitli yöntemler kullanır. Kodun yapısını ve işleyişini açıklayarak her bir fonksiyona teker teker bakacağız.
Kodun Genel Yapısı
Kodumuzdaki temel işlevler şunlardır:
1. Dosya Türünü Tespit Etme "detect_file_type"
2. Fazladan Bilgiler Alma "get_additional_info"
3. Detaylı Dosya Analizi "detailed_file_analysis"
4. Ana Fonksiyon "main"
Modüller
İlk olarak gerekli olan modülleri yazıyoruz:
* "os": Dosya ve dizin işlemleri için yapmak için kullanılır. Dosyanın boyutunu ve son değiştirilme tarihini almak için kullanılır.
* "mimetypes": Dosya uzantısına göre MIME türünü tahmin etmek için kullanılır.
* "magic": Dosyanın MIME türünü içerik üzerinden belirlemek için kullanılır. Daha doğru sonuçlar sağlar.
* "datetime": Dosyanın son değiştirilme tarihini formatlamak için kullanılır.
Magic Numbers ile Dosya Türü Tespiti
Bu sözlük, çeşitli dosya türlerini tanımlayan magic numbers'ların açıklamalarını içerir. Magic numbers, dosyanın başındaki belirli byte dizileridir ve dosyanın formatını anlamak için kullanırız.
"detect_file_type" fonksiyonu, dosyanın ilk 32 baytını okuyarak magic numbers ile karşılaştırır. Eğer magic numbers bulanamazsa "magic" kütüphanesi kullanılarak MIME türünü belirler.
Fazladan Bilgilerin Alınması
Bu fonksiyon, dosyanın boyutunu, son değiştirilme tarihini ve MIME türünü alır. "os.path.getsize" ve "os.path.getmime" fonksiyonları kullanılarak dosya bilgilerini alırız. MIME türü ise "mimetypes" modülü ile bulunmaya çalışır.
Detaylı Dosya Analizi
"detailed_file_analysis" fonksiyonu, dosyanın ilk 64 bytanı okur ve belirli formatları tanır. Eğer dosya tanımlanamayan bir türdüyse "Bilinmeyen" olarak işaretler.
İlk olarak gerekli olan modülleri yazıyoruz:
Python:
import os
import mimetypes
import magic
from datetime import datetime
* "mimetypes": Dosya uzantısına göre MIME türünü tahmin etmek için kullanılır.
* "magic": Dosyanın MIME türünü içerik üzerinden belirlemek için kullanılır. Daha doğru sonuçlar sağlar.
* "datetime": Dosyanın son değiştirilme tarihini formatlamak için kullanılır.
Magic Numbers ile Dosya Türü Tespiti
Python:
# Dosya türlerini belirlemek için magic numbers kullanılır
MAGIC_NUMBERS = {
b'\xFF\xD8\xFF': 'JPEG Resmi',
b'\x89PNG\r\n\x1A\n': 'PNG Resmi',
b'\x25\x50\x44\x46': 'PDF Belgesi',
b'\x42\x4D': 'BMP Resmi',
b'\x47\x49\x46\x38': 'GIF Resmi',
b'\x49\x49\x2A\x00': 'TIFF Resmi (küçük endian)',
b'\x4D\x4D\x00\x2A': 'TIFF Resmi (büyük endian)',
b'\x50\x4B\x03\x04': 'ZIP Arşivi',
b'\x1F\x8B\x08': 'GZIP Arşivi',
b'\x52\x61\x72\x21\x1A\x07\x00': 'RAR Arşivi',
b'\x7F\x45\x4C\x46': 'ELF Çalıştırılabilir Dosyası',
b'\x4D\x5A': 'EXE Çalıştırılabilir Dosyası',
# Diğer formatlarıda ekleyebilirsiniz.
Python:
def detect_file_type(file_path):
try:
with open(file_path, 'rb') as file:
file_header = file.read(32) # Dosyanın ilk 32 baytını oku
# Magic numbers ile karşılaştırma yapar
for magic_number, file_type in MAGIC_NUMBERS.items():
if file_header.startswith(magic_number):
return file_type
# MIME türünü belirlemek için `magic` kütüphanesi kullanılır
mime = magic.Magic(mime=True)
mime_type = mime.from_file(file_path)
return mime_type if mime_type else 'Bilinmeyen Dosya Türü'
except Exception as e:
return f"Hata: {str(e)}"
Fazladan Bilgilerin Alınması
Python:
def get_additional_info(file_path):
try:
# Dosyanın boyutunu alır
file_size = os.path.getsize(file_path)
# Dosyanın son değiştirilme tarihini alır
last_modified = os.path.getmtime(file_path)
last_modified_date = datetime.fromtimestamp(last_modified).strftime('%Y-%m-%d %H:%M:%S')
# MIME türünü tahmin eder
mime_type = mimetypes.guess_type(file_path)[0] or 'Bilinmeyen MIME Türü'
return file_size, last_modified_date, mime_type
except Exception as e:
return None, None, f"Hata: {str(e)}"
Detaylı Dosya Analizi
Python:
def detailed_file_analysis(file_path):
try:
with open(file_path, 'rb') as file:
file_header = file.read(64) # Daha geniş bir bayt aralığını oku
analysis = {}
# Dosyanın başındaki ilk 64 baytı analiz eder
if file_header.startswith(b'\xFF\xD8\xFF'):
analysis['Format'] = 'JPEG'
analysis['Details'] = 'JPEG formatı; resim verileri ve meta verileri içerir.'
elif file_header.startswith(b'\x89PNG\r\n\x1A\n'):
analysis['Format'] = 'PNG'
analysis['Details'] = 'PNG formatı; sıkıştırılmış, şeffaf resim dosyasıdır.'
elif file_header.startswith(b'\x25\x50\x44\x46'):
analysis['Format'] = 'PDF'
analysis['Details'] = 'PDF formatı; belge yapıları ve metin içerir.'
elif file_header.startswith(b'\x42\x4D'):
analysis['Format'] = 'BMP'
analysis['Details'] = 'BMP formatı; ham bitmap görüntü verilerini içerir.'
else:
analysis['Format'] = 'Bilinmeyen'
analysis['Details'] = 'Bu dosya türü tanımlanamıyor.'
return analysis
except Exception as e:
return f"Hata: {str(e)}"
Ana Fonksiyon
"main" fonksiyonu, kullanıcıdan dosya yolunu alır ve dosyanın çeşitli bilgilerini detaylı şekilde ekrana yazdırır. Dosya geçerli değilse hata mesajı verir.
Python:
def main():
# Kullanıcıdan dosya yolunu alır
file_path = input("Dosya yolunu girin: ")
if not os.path.isfile(file_path):
print(f"{file_path} geçerli bir dosya değil.")
return
file_type = detect_file_type(file_path)
file_size, last_modified_date, mime_type = get_additional_info(file_path)
analysis = detailed_file_analysis(file_path)
# Sonuçları ekrana yazdırır
print(f"Dosya Türü: {file_type}")
print(f"Dosya Boyutu: {file_size} bayt")
print(f"Son Değiştirilme Tarihi: {last_modified_date}")
print(f"MIME Türü: {mime_type}")
print(f"Detaylı Dosya Analizi: {analysis}")
if __name__ == "__main__":
main()
Sonuç
Bu kod, dosyaların türlerini ve içeriklerini analiz etmek için oldukça kapsamlı bir araçtır. Magic numbers ve MIME türlerini kullanarak dosyaları tanımlayabilir ve detaylı format analizleri yapabilirsiniz. Kodunuzu geliştirerek, daha fazla dosya türü ekleyebilir ve kullanıcı arayüzünü iyileştirebilirsiniz.
Bana vaktinizi ayırıp dinlediğiniz için teşekkür ederim, diğer konularda görüşmek üzere.
Bu kod, dosyaların türlerini ve içeriklerini analiz etmek için oldukça kapsamlı bir araçtır. Magic numbers ve MIME türlerini kullanarak dosyaları tanımlayabilir ve detaylı format analizleri yapabilirsiniz. Kodunuzu geliştirerek, daha fazla dosya türü ekleyebilir ve kullanıcı arayüzünü iyileştirebilirsiniz.
Bana vaktinizi ayırıp dinlediğiniz için teşekkür ederim, diğer konularda görüşmek üzere.



