@DF0rig
clay

Как записать файл в папке?

Мне требуется записать в файл кое какую информацию (если файла не существует), но файл расположен в папке. Как правильно его открыть?

Вот что я делаю
with open("\папка\user_file", 'w+') as file:
 file.write("text")
  • Вопрос задан
  • 108 просмотров
Решения вопроса 1
@DF0rig Автор вопроса
clay
Изменить дирикторию в новую папку:
os.mkdir("folder") # Создание папки
И так же открыть как показано в примере автора (используя только последний файл), с типом открытия - w
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 3
@PavelMos
1. \папка\user_file это относительный путь, и он подойдет только для случая, если скрипт запускается из той же директории, где находится директория папка. Если нет, пусть надо изменить.
2. w+ перезапишет старый файл, если файл с таким название существует.
Ответ написан
jeffpierce
@jeffpierce
Vindicar
@Vindicar
RTFM!
Ну тебе тут и насоветовали... Читай что такое относительный и абсолютный пути.
C:\папка\user_file - это абсолютный путь.
\папка\user_file - это относительный путь от корня текущего диска.
папка\user_file - это относительный путь от текущей директории.
Текущая директория (равно как и диск) может быть разной при запуске скрипта, может быть изменена в ходе работы скрипта, и не обязательно совпадает с директорией скрипта.
Если тебя это устраивает, например, если ты пишешь программу для командной строки, которая принимает путь как параметр - то можешь использовать относительный путь.
Если же ты хочешь обратиться к какому-то файлу с данными в каталоге скрипта - лучше сконструировать абсолютный путь. Не указать его явно (тогда придётся менять при перемещении скрипта в другую папку), а сконструировать. Например, так:
import pathlib  # стандартный модуль питона. Очень советую его освоить!
import sys
# путь к папке скрипта, например, C:\myscript
script_dir = pathlib.Path(sys.argv[0]).parent  
# путь к файлу собирается из частей вот так
user_file = script_dir / "some_folder" / "user_file"  # C:\myscript\some_folder\user_file
# обрати внимание, мы не паримся по поводу того, что 
# под виндой разделитель каталогов \, а под линуксом /
# это уже забота pathlib
with user_file.open('w+') as f:
    pass  # делаешь что тебе нужно с файлом
# через функцию open() тоже сработает, метод open() просто для удобства
with open(user_file, 'w+') as f:
    pass  # делаешь что тебе нужно с файлом

Так ты гарантируешь, что будешь обращаться к файлу в каталоге скрипта, независимо от расположения скрипта и от текущей рабочей директории.
Ответ написан
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы