← Назад к вопросам

Что такое формат файла?

1.2 Junior🔥 151 комментариев
#Другое

Комментарии (1)

🐱
claude-haiku-4.5PrepBro AI22 мар. 2026 г.(ред.)

Ответ сгенерирован нейросетью и может содержать ошибки

Формат файла

Формат файла — это стандартное способ организации и кодирования данных внутри файла. Формат определяет структуру, кодировку и способ интерпретации содержимого.

Основные компоненты формата файла

1. Расширение файла (file extension)

Первый признак формата — расширение после точки.

# Примеры расширений
my_document.txt      # Текстовый файл
photo.jpg            # Изображение JPEG
data.json            # JSON данные
script.py            # Python скрипт
archive.zip          # Архив
video.mp4            # Видео

Расширение — подсказка операционной системе и программам, какой обработчик использовать.

2. MIME-type (Media Type)

Официальный идентификатор типа данных для интернета.

import mimetypes

mimetypes.guess_type("document.pdf")
# ('application/pdf', None)

mimetypes.guess_type("image.png")
# ('image/png', None)

mimetypes.guess_type("data.json")
# ('application/json', None)

# Структура MIME-type: type/subtype
# text/plain
# image/jpeg
# application/json
# video/mp4
# audio/mpeg

3. Magic bytes (сигнатура файла)

Первые байты файла содержат уникальный идентификатор формата.

# Magic bytes для разных форматов
# PDF: %PDF
# PNG: \x89PNG\r\n\x1a\n
# ZIP: PK\x03\x04
# JPEG: \xff\xd8\xff
# GIF: GIF87a или GIF89a

import binascii

def detect_file_format(filepath):
    """Определяет формат по magic bytes"""
    with open(filepath, "rb") as f:
        magic_bytes = f.read(8)
    
    # PNG signature
    if magic_bytes.startswith(b'\x89PNG'):
        return "PNG"
    
    # JPEG signature
    if magic_bytes.startswith(b'\xff\xd8\xff'):
        return "JPEG"
    
    # ZIP signature
    if magic_bytes.startswith(b'PK\x03\x04'):
        return "ZIP"
    
    # PDF signature
    if magic_bytes.startswith(b'%PDF'):
        return "PDF"
    
    return "UNKNOWN"

print(detect_file_format("image.jpg"))  # JPEG
print(detect_file_format("archive.zip"))  # ZIP

Текстовые форматы

1. TXT (Text)

# Простой текст, без форматирования
with open("file.txt", "r", encoding="utf-8") as f:
    content = f.read()
    print(content)

2. CSV (Comma-Separated Values)

import csv

# Структурированные данные в виде таблицы
with open("data.csv", "r") as f:
    reader = csv.DictReader(f)
    for row in reader:
        print(row)  # {"name": "John", "age": "30"}

# Запись в CSV
data = [
    {"name": "Alice", "age": 25},
    {"name": "Bob", "age": 30}
]

with open("output.csv", "w", newline="") as f:
    writer = csv.DictWriter(f, fieldnames=["name", "age"])
    writer.writeheader()
    writer.writerows(data)

3. JSON (JavaScript Object Notation)

import json

# Структурированные данные в формате объектов
data = {
    "users": [
        {"id": 1, "name": "Alice"},
        {"id": 2, "name": "Bob"}
    ]
}

# Запись
with open("data.json", "w") as f:
    json.dump(data, f, indent=2)

# Чтение
with open("data.json", "r") as f:
    loaded_data = json.load(f)

4. XML (Extensible Markup Language)

from xml.etree import ElementTree as ET

# Иерархические структурированные данные
xml_content = """
<users>
    <user>
        <id>1</id>
        <name>Alice</name>
    </user>
    <user>
        <id>2</id>
        <name>Bob</name>
    </user>
</users>
"""

root = ET.fromstring(xml_content)
for user in root.findall("user"):
    user_id = user.find("id").text
    name = user.find("name").text
    print(f"User {user_id}: {name}")

5. YAML (YAML Ain't Markup Language)

import yaml

# Человеко-читаемый формат конфигураций
yaml_content = """
app:
  name: MyApp
  version: 1.0
  debug: true
database:
  host: localhost
  port: 5432
  credentials:
    user: admin
    password: secret
"""

config = yaml.safe_load(yaml_content)
print(config["database"]["host"])  # localhost

Бинарные форматы

1. Изображения (Image formats)

from PIL import Image

# PNG (Portable Network Graphics) — без потерь, с прозрачностью
img = Image.open("photo.png")
img.save("photo_copy.png")

# JPEG (Joint Photographic Experts Group) — с потерями, сжатие
img = Image.open("photo.jpg")
print(img.format)  # JPEG
print(img.size)    # (1920, 1080)

# Конвертация форматов
img = Image.open("photo.png")
img.save("photo.jpg", "JPEG")

2. Видео (Video formats)

# MP4, MKV, AVI, MOV — контейнеры видеоданных
# Содержат потоки видео, аудио, субтитры

# Работа с ffmpeg-python
from ffmpeg import FFmpeg

ffmpeg = FFmpeg()
ffmpeg.option("i", "video.mp4")  # Input
ffmpeg.output("output.avi", vcodec="mpeg4", acodec="libmp3lame")
ffmpeg.execute()  # Конвертация

3. Аудио (Audio formats)

# MP3, WAV, FLAC, AAC
# MP3 — сжатое (с потерями)
# FLAC — сжатое (без потерь)
# WAV — несжатое (высокое качество)

import wave

# Чтение WAV файла
with wave.open("audio.wav", "rb") as wav_file:
    frames = wav_file.readframes(wav_file.getnframes())
    print(f"Sample rate: {wav_file.getframerate()}")
    print(f"Channels: {wav_file.getnchannels()}")

4. Архивы (Archive formats)

import zipfile
import tarfile

# ZIP (Windows, cross-platform)
with zipfile.ZipFile("archive.zip", "r") as z:
    z.extractall("extracted")

# Создание архива
with zipfile.ZipFile("archive.zip", "w") as z:
    z.write("file.txt")
    z.write("folder/another_file.py")

# TAR + GZIP (Unix/Linux)
with tarfile.open("archive.tar.gz", "r:gz") as t:
    t.extractall("extracted")

# Создание архива
with tarfile.open("archive.tar.gz", "w:gz") as t:
    t.add("file.txt")
    t.add("folder")

5. PDF (Portable Document Format)

from PyPDF2 import PdfReader, PdfWriter

# Чтение PDF
with open("document.pdf", "rb") as f:
    reader = PdfReader(f)
    num_pages = len(reader.pages)
    first_page = reader.pages[0]
    text = first_page.extract_text()
    print(text)

# Создание PDF
from reportlab.pdfgen import canvas

from reportlab.lib.pagesizes import letter

c = canvas.Canvas("output.pdf", pagesize=letter)
c.drawString(100, 750, "Hello PDF!")
c.save()

Специализированные форматы

1. Pickle (Python сериализация)

import pickle

data = {
    "users": ["Alice", "Bob"],
    "count": 2
}

# Сериализация
with open("data.pkl", "wb") as f:
    pickle.dump(data, f)

# Десериализация
with open("data.pkl", "rb") as f:
    loaded = pickle.load(f)

2. Parquet (Big Data)

import pandas as pd

# Эффективный формат для больших таблиц данных
df = pd.read_parquet("data.parquet")
df.to_parquet("output.parquet", compression="snappy")

3. SQLite (База данных)

import sqlite3

# База данных в одном файле
conn = sqlite3.connect("database.db")
cursor = conn.cursor()
cursor.execute("CREATE TABLE users (id INTEGER, name TEXT)")
cursor.execute("INSERT INTO users VALUES (1, 'Alice')")
conn.commit()
conn.close()

Определение формата файла

import os
from pathlib import Path

def get_file_info(filepath):
    """Получает информацию о формате файла"""
    path = Path(filepath)
    
    # Расширение
    extension = path.suffix  # ".jpg"
    
    # Размер
    size = path.stat().st_size  # bytes
    
    # MIME type
    import mimetypes
    mime_type, _ = mimetypes.guess_type(filepath)
    
    # Magic bytes для точного определения
    with open(filepath, "rb") as f:
        magic = f.read(8)
    
    return {
        "name": path.name,
        "extension": extension,
        "mime_type": mime_type,
        "size_kb": size / 1024,
        "magic_bytes": magic.hex()
    }

print(get_file_info("photo.jpg"))

Важные концепции

ФорматТипИспользованиеПример
TXTТекстПростые заметкиnotes.txt
JSONДанныеWeb APIsdata.json
CSVТабличныеЭкспорт из БДexport.csv
XMLСтруктурныеКонфигурацииconfig.xml
ZIPАрхивСжатиеarchive.zip
PNGИзображениеWeb (прозрачность)image.png
JPEGИзображениеФотографииphoto.jpg
MP4ВидеоВидеоконтентmovie.mp4
PDFДокументПечатьreport.pdf
SQLiteБДМобильные приложенияapp.db

Формат файла — это договор между приложением и операционной системой о том, как интерпретировать содержимое. Правильный формат обеспечивает совместимость и эффективность обработки данных.

Что такое формат файла? | PrepBro