Работа с файлове и директории в Python

Работа с файлове и директории в Python

Урок 5: Работа с файлове и директории в Python

В този урок ще разгледаме как да работим с файлове и директории в Python. Ще научим как да четем и записваме файлове, както и как да манипулираме директории. Тези умения са основни за създаването на приложения, които трябва да съхраняват и извличат данни от файловата система.

Четене и записване на текстови файлове

Работата с текстови файлове в Python се осъществява чрез вградената функция open().

Отваряне на файл

За да отворим файл за четене или запис, използваме функцията open(), която приема два основни аргумента: името на файла и режима на отваряне.

  • r: четене (read)
  • w: запис (write) – създава нов файл или презаписва съществуващ
  • a: добавяне (append) – добавя към края на файла
  • b: двоичен режим (binary)
file = open("example.txt", "r")  # Отваряме файла в режим на четене

Четене на съдържание

Можем да четем съдържанието на файла с методите read(), readline() или readlines().

file = open("example.txt", "r")

# Четене на целия файл
content = file.read()
print(content)

# Четене на един ред
file.seek(0)  # Връщане на указателя в началото на файла
line = file.readline()
print(line)

# Четене на всички редове
file.seek(0)
lines = file.readlines()
print(lines)

file.close()  # Затваряне на файла

Записване в файл

За да записваме данни във файл, отваряме го в режим на запис или добавяне и използваме метода write().

file = open("example.txt", "w")

file.write("Hello, world!\n")
file.write("This is a new line.")

file.close()  # Затваряне на файла

Контекстни мениджъри

Контекстните мениджъри са препоръчителен начин за работа с файлове, защото автоматично затварят файла след като сме приключили с него.

with open("example.txt", "r") as file:
    content = file.read()
    print(content)

# Файлът се затваря автоматично тук

Работа с двоични файловеДвоичните файлове се отварят в двоичен режим с добавяне на b към режима на отваряне.

# Записване в двоичен файл
with open("example.bin", "wb") as file:
    file.write(b'\xDE\xAD\xBE\xEF')

# Четене на двоичен файл
with open("example.bin", "rb") as file:
    content = file.read()
    print(content)

Работа с директории

Модулът os предоставя функции за работа с директории и файлове в тях.

Проверка дали файл или директория съществува

import os

# Проверка дали файл съществува
print(os.path.exists("example.txt"))  # True или False

# Проверка дали пътят е директория
print(os.path.isdir("example_directory"))  # True или False

# Проверка дали пътят е файл
print(os.path.isfile("example.txt"))  # True или False

Създаване и изтриване на директории

# Създаване на нова директория
os.mkdir("new_directory")

# Изтриване на директория
os.rmdir("new_directory")

Навигация в файловата система

# Получаване на текущата директория
print(os.getcwd())

# Промяна на текущата директория
os.chdir("new_directory")
print(os.getcwd())

# Връщане в предишната директория
os.chdir("..")
print(os.getcwd())

Изброяване на файлове и директории

# Изброяване на всички файлове и директории в текущата директория
print(os.listdir("."))

# Изброяване на всички файлове и директории в конкретна директория
print(os.listdir("/path/to/directory"))

Работа с модула shutil

Модулът shutil предоставя функции за копиране и изтриване на файлове и директории.

Копиране на файл

import shutil

# Копиране на файл
shutil.copy("example.txt", "example_copy.txt")

Преместване на файл или директория

# Преместване на файл или директория
shutil.move("example.txt", "new_directory/example.txt")

Изтриване на директория с цялото ѝ съдържание

# Изтриване на директория с цялото ѝ съдържание
shutil.rmtree("example_directory")

Примерна програма: Управление на бележки

Нека създадем програма за управление на бележки, която позволява добавяне, четене и изтриване на бележки.

Дефиниране на функции

notes.py

import os

def add_note(filename, content):
    with open(filename, "w") as file:
        file.write(content)

def read_note(filename):
    if os.path.exists(filename):
        with open(filename, "r") as file:
            return file.read()
    else:
        return "Note does not exist."

def delete_note(filename):
    if os.path.exists(filename):
        os.remove(filename)
        return "Note deleted."
    else:
        return "Note does not exist."

def list_notes(directory="."):
    return [f for f in os.listdir(directory) if os.path.isfile(f)]

Основна програма

main.py

import notes

# Добавяне на бележки
notes.add_note("note1.txt", "This is the first note.")
notes.add_note("note2.txt", "This is the second note.")

# Четене на бележки
print(notes.read_note("note1.txt"))

# Изтриване на бележка
print(notes.delete_note("note1.txt"))

# Изброяване на бележки
print("Notes in directory:")
for note in notes.list_notes():
    print(note)

Заключение

В този урок разгледахме основните концепции за работа с файлове и директории в Python. Научихме как да четем и записваме текстови и двоични файлове, как да използваме контекстни мениджъри, и как да манипулираме директории с помощта на модулите os и shutil. В следващите уроци ще разгледаме работа с бази данни и мрежово програмиране, за да разширим още повече нашите знания и умения в Python. Практикувайте редовно и експериментирайте с различни операции с файлове и директории, за да затвърдите наученото.

Благодарим ви за прочитането на статията! Ако намерихте информацията за полезна, можете да дарите посредством бутоните по-долу: