Робота з файлами та директоріями
Режими доступу
- 'r': Відкриття файлу для читання (режим за замовчуванням). Файл повинен існувати.
- 'w': Відкриття файлу для запису. Вміст файлу буде видалено. Якщо файл не існує, він буде створений.
- 'a': Відкриття файлу для додавання. Дані будуть додані в кінець файлу. Якщо файл не існує, він буде створений.
- 'r+': Відкриття файлу для читання та запису. Файл повинен існувати.
- 'w+': Відкриття файлу для читання та запису. Вміст файлу буде видалено. Якщо файл не існує, він буде створений.
- 'a+': Відкриття файлу для читання та додавання. Дані будуть додані в кінець файлу. Якщо файл не існує, він буде створений.
Для роботи з бінарними файлами додається літера b ('rb' для читання, 'wb' для запису, 'r+b' для читання та запису і так далі)
Запис у файл
Метод write() - записує рядок у файл
# Відкриття файлу в режимі запису
file = open('example.txt', 'w', encoding='utf-8')
file.write("Hello, World!\n")
file.write("This is a test file.\n")
file.close()Метод writelines() - приймає список рядків і записує їх у файл
lines = ["First line.\n", "Second line.\n", "Third line.\n"]
# Відкриття файлу в режимі запису
file = open('example.txt', 'w')
file.writelines(lines)
file.close()Асинхронний контекстний менеджер для роботи з файлами
import aiofiles
import asyncio
async def main():
async with aiofiles.open('example.txt', mode='w') as file:
await file.write('Hello, world!')
asyncio.run(main())Читання файлу
Метод read() зчитує весь вміст файлу в один рядок
file = open('example.txt', 'r')
content = file.read()
print(content)
file.close()Читання всіх рядків файлу
file = open('example.txt', 'r')
lines = file.readlines()
for line in lines:
print(line.strip()) # strip() видаляє зайві пробіли та символи нового рядка
file.close()Ітерація по рядках файлу
Об'єкт file має вбудований ітератор, тому можна пройтись по його вмісту за допомогою циклу for. Це дозволяє читати файл построчно, не завантажуючи весь файл в пам'ять.
file = open('example.txt', 'r')
for line in file:
print(line.strip())
file.close()Читання частини файлу
file = open('example.txt', 'r')
content = file.read(10) # Читає перші 10 символів
print(content)
file.close()Читання файлу построчно
file = open('example.txt', 'r')
line = file.readline()
while line:
print(line.strip())
line = file.readline()
file.close()Закриття файла
try:
with open('example.txt', 'w') as file:
file.write("Hello, World!\n")
file.write("This is a test file.\n")
# Виняток, щоб перевірити, що файл все одно закриється
raise Exception("Something went wrong")
except Exception as e:
print(f"Caught an exception: {e}")
# У цьому місці файл вже закритийРобота з файлами на диску
Копіювання файлу
import shutil
shutil.copy('source.txt', 'destination.txt')Переміщення файлу
import shutil
shutil.move('source.txt', 'destination.txt')Видалення файлу
import os
os.remove('example.txt')Перевірка існування файлу
import os
if os.path.exists('example.txt'):
print("File exists")
else:
print("File does not exist")
# Якщо файл не існує, програма виконає дії, описані в блоці else.
# Наприклад, можна вивести попередження, створити новий файл або вийти з програми.Перевірка — це директорія чи ні
if os.path.isdir('example_directory'):
print("Це директорія")
else:
print("Це не директорія")Перевірка — це файл чи ні
if os.path.isfile('example_file'):
print("Це файл")
else:
print("Це не файл")Отримання розширення файлу
import os.path
# Отримання розширення файлу
file_path = 'example.txt'
file_extension = os.path.splitext(file_path)[1]
print(f"Розширення файлу: {file_extension}")Отримання імені файлу без розширення
import os.path
# Отримання імені файлу без розширення
file_path = 'example.txt'
file_name = os.path.splitext(os.path.basename(file_path))[0]
print(f"Ім'я файлу без розширення: {file_name}")Отримання імені файлу з шляху
Функція basename() повертає тільки ім'я файлу, відрізаючи весь шлях до нього.
import os.path
# Отримання імені файлу з шляху
file_path = '/path/to/example.txt'
file_name = os.path.basename(file_path)
print(f"Ім'я файлу: {file_name}")Отримання директорії з шляху
Також легко отримати тільки директорію з імені файлу за допомогою функції dirname().
import os.path
# Отримання директорії з шляху
file_path = '/path/to/example.txt'
directory = os.path.dirname(file_path)
print(f"Директорія: {directory}")Об'єднання шляхів
Якщо у тебе є окремо директорія і окремо ім'я файлу, ти можеш отримати повний шлях до цього файлу.
import os.path
# Об'єднання шляхів
directory = '/path/to'
file_name = 'example.txt'
full_path = os.path.join(directory, file_name)
print(f"Повний шлях: {full_path}")Отримання абсолютного шляху
import os.path
# Отримання абсолютного шляху
relative_path = 'example.txt'
absolute_path = os.path.abspath(relative_path)
print(f"Абсолютний шлях: {absolute_path}")Робота з директоріями
Створення директорії
import os
# Створення нової директорії
os.mkdir('new_directory')
print("Директорія 'new_directory' створена")Створення кількох вкладених директорій
import os
# Створення кількох вкладених директорій
os.makedirs('parent_directory/child_directory')
print("Вкладені директорії 'parent_directory/child_directory' створені")Видалення директорії
Для видалення порожньої директорії використовується функція os.rmdir(). Для видалення директорії з вмістом використовується функція shutil.rmtree().
import os
# Видалення порожньої директорії
os.rmdir('new_directory')
print("Директорія 'new_directory' видалена")
# Видалення директорії з вмістом
shutil.rmtree('parent_directory')
print("Директорія 'parent_directory' та весь її вміст видалено")Копіювання директорій
Переміщення та перейменування директорії
import os
# Створення директорії для прикладу
os.mkdir('original_directory')
# Перейменування директорії
os.rename('original_directory', 'renamed_directory')
print("Директорія 'original_directory' перейменована в 'renamed_directory'")Копіювання директорії
import os
import shutil
# Створення директорії для прикладу
os.mkdir('source_directory')
# Копіювання директорії
shutil.copytree('source_directory', 'destination_directory')
print("Директорія 'source_directory' скопійована в 'destination_directory'")Поточна директорія
Отримання поточної робочої директорії
import os
# Отримання поточної робочої директорії
current_directory = os.getcwd()
print(f"Поточна робоча директорія: {current_directory}")Зміна поточної робочої директорії
import os
# Зміна поточної робочої директорії
os.chdir('new_directory')
print(f"Поточна робоча директорія змінена на: {os.getcwd()}")Перевірка існування директорії
import os
# Перевірка існування директорії
directory_path = 'new_directory'
if os.path.exists(directory_path):
print(f"Директорія '{directory_path}' існує")
else:
print(f"Директорія '{directory_path}' не існує")Отримання абсолютного шляху директорії
import os
# Отримання абсолютного шляху директорії
relative_path = 'example_directory'
absolute_path = os.path.abspath(relative_path)
print(f"Абсолютний шлях: {absolute_path}")Вміст директорії
Отримання списку файлів і директорій
import os
# Отримання списку файлів і директорій у поточній директорії
contents = os.listdir('.')
print(f"Вміст поточної директорії: {contents}")Отримання інформації про вміст директорії з використанням os.scandir()
import os
# Отримання інформації про вміст директорії
with os.scandir('.') as entries:
for entry in entries:
print(f"Ім'я: {entry.name}, Це директорія: {entry.is_dir()}, Це файл: {entry.is_file()}")
Серіалізація
Серіалізація — це процес перетворення об'єкта в послідовність байтів або формат, який можна зберегти у файл, передати по мережі або зберегти у базі даних.
Десеріалізація — це зворотний процес, при якому з цієї послідовності байтів відновлюється вихідний об'єкт.
Модуль pickle
import pickle
# Приклад об'єкта для серіалізації
data = {'name': 'Alice', 'age': 30, 'is_student': False}
# Серіалізація об'єкта у файл
with open('data.pkl', 'wb') as file:
pickle.dump(data, file)
# Десеріалізація об'єкта з файлу
with open('data.pkl', 'rb') as file:
loaded_data = pickle.load(file)
print(loaded_data)Модуль json
import json
# Приклад об'єкта для серіалізації
data = {'name': 'Bob', 'age': 25, 'is_student': True}
# Серіалізація об'єкта в строку JSON
json_string = json.dumps(data)
print(json_string)
# Серіалізація об'єкта у файл JSON
with open('data.json', 'w') as file:
json.dump(data, file)
# Десеріалізація об'єкта зі строки JSON
loaded_data = json.loads(json_string)
print(loaded_data)
# Десеріалізація об'єкта з файлу JSON
with open('data.json', 'r') as file:
loaded_data = json.load(file)
print(loaded_data)Модуль yaml
import yaml
# Приклад об'єкта для серіалізації
data = {'name': 'Carol', 'age': 27, 'is_student': False}
# Серіалізація об'єкта в строку YAML
yaml_string = yaml.dump(data)
print(yaml_string)
# Серіалізація об'єкта у файл YAML
with open('data.yaml', 'w') as file:
yaml.dump(data, file)
# Десеріалізація об'єкта зі строки YAML
loaded_data = yaml.load(yaml_string, Loader=yaml.FullLoader)
print(loaded_data)
# Десеріалізація об'єкта з файлу YAML
with open('data.yaml', 'r') as file:
loaded_data = yaml.load(file, Loader=yaml.FullLoader)
print(loaded_data)Модуль marshal
import marshal
# Приклад об'єкта для серіалізації
data = {'name': 'Dave', 'age': 35, 'is_student': True}
# Серіалізація об'єкта у файл
with open('data.marshal', 'wb') as file:
marshal.dump(data, file)
# Десеріалізація об'єкта з файлу
with open('data.marshal', 'rb') as file:
loaded_data = marshal.load(file)
print(loaded_data)Модуль shelve
import shelve
# Приклад об'єкта для серіалізації
data = {'name': 'Eve', 'age': 28, 'is_student': False}
# Серіалізація об'єкта у файл
with shelve.open('data.shelve') as db:
db['person'] = data
# Десеріалізація об'єкта з файлу
with shelve.open('data.shelve') as db:
loaded_data = db['person']
print(loaded_data)