Комментарии (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 APIs | data.json |
| CSV | Табличные | Экспорт из БД | export.csv |
| XML | Структурные | Конфигурации | config.xml |
| ZIP | Архив | Сжатие | archive.zip |
| PNG | Изображение | Web (прозрачность) | image.png |
| JPEG | Изображение | Фотографии | photo.jpg |
| MP4 | Видео | Видеоконтент | movie.mp4 |
| Документ | Печать | report.pdf | |
| SQLite | БД | Мобильные приложения | app.db |
Формат файла — это договор между приложением и операционной системой о том, как интерпретировать содержимое. Правильный формат обеспечивает совместимость и эффективность обработки данных.