andriamino
@andriamino

Как исправить ошибку при попытке создать файл в функции и затем его открыть?

Мне необходимо создавать и записывать данные в новый файл в питоне каждый раз когда вызывается соответствующая функция. Но загвоздка в том, что создание файла происходит в 1 функции, а запись в другом. Я бы мог перенести открытие файла во 2 функцию но тогда код сильно увеличится, тк во 2 конструкции запись происходит благодаря конструкции match case и открывать файл до нее я не могу. Поэтому я создаю/открываю файл в 1 функции. Но я так понимаю что он открывается локально 2 функция не может его открыть. Что делать? Как открыть его глобально?
  • Вопрос задан
  • 50 просмотров
Решения вопроса 1
Mike_Ro
@Mike_Ro Куратор тега Python
Python, JS, WordPress, SEO, Bots, Adversting
Мне необходимо создавать и записывать данные в новый файл

Читать 1 файл (mode='r') можно неограниченному количеству скриптов единовременно.

Чтение с возможностью записи (w, a или r+):
- В винде файл может блокироваться первым читающим, остальные сосут чупик.
- В линуксе возможно не блокирование файла, но могут возникнуть проблемы с записью, если не реализован механизм синхронизации.

Самое простое - использовать контролируемую блокировку файла на уровне скрипта, который взаимодействует с файлами (fcntl==linux, msvcrt==win):
import fcntl

with open('file.txt', 'a') as f:
    fcntl.flock(f, fcntl.LOCK_EX)  # файл кем то заблокирован, ждем
    try:
        f.write("Some data\n")  # файл разблочился, блокируем его и работаем с ним
    finally:
        fcntl.flock(f, fcntl.LOCK_UN)  # что то пошло не так, снимаем блокировку с файла принудительно
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы