Найти - Пользователи
Полная версия: Помогите указать путь к файлу
Начало » Python для новичков » Помогите указать путь к файлу
1
WellRai
Я установил qpython на андроид и дорабатываю программы в этой среде:
Мне нужно указать путь к файлу,но это ведь отличная от Виндовс файловая система ,как это сделать
Пример :file = open(“. ”,“w”)   
⬆️
Что писать тут
PEHDOM
у андроидов ноги растут из линукса соответвенно пути к файлам должны бывть “как в линуксе”
приверно так:
 rdir = "/mnt/sdcard/бла-бла-бла-путь-куда-хотим-писать/"
with open(rdir+"test.txt", "wt") as out_file:
...........
WellRai
Спасибо​, только есть несколько вопросов: почему ты это делаешь через оператор with ?И как этот файл записать в переменную?
PEHDOM
with это менеджер контекста, он работает как Exception и гарантирует выполнение завершающих действий (например, закрытие файла) вне зависимости от того, произошло исключение внутри блока кода или нет.
вот пример:
 rdir = "/mnt/sdcard/бла-бла-бла-путь-куда-хотим-писать/"
out_file = open(rdir+"test.txt", "wt")  # открываем файл
out_file.write('some text /n')             # пишем в файл какуюто ахинею
# тут мы еще пишем 100500 строк кода, в котором может быть что угодно
out_file.write('another  text /n')              # пишем в файл какуюто ахинею
out_file.close()                                  # закрывам файл 
Метод close завершает формирование содержимого файла и освобождает системные ресурсы.
Обычно файлы автоматически закрываются, когда объект файла уничтожается интерпретатором при сборке мусора (т.е. когда в сценарии исчезнет послдняя ссылка на объект).
А теперь представь что гдето между out_file = open(rdir+“test.txt”, “wt”) и out_file.close() программа вызвала ошибку и аварийно завершилась. Наш файл так и останеться открытым. И к нему никто не сможет обратиться.
Можно использовать try-except-finally:
 rdir = "/mnt/sdcard/бла-бла-бла-путь-куда-хотим-писать/"
out_file = open(rdir+"test.txt", "wt")  # открываем файл
try:
    out_file.write('some text /n')             # пишем в файл какуюто ахинею
    # тут мы еще пишем 100500 строк кода, в котором может быть что угодно
    out_file.write('another  text /n')              # пишем в файл какуюто ахинею
finally:
    out_file.close()                                  # закрывам файл
Теперь даже если гдето в try:… возникнет исключение файл закроеться.
чтобы каждый раз не писать конструкции try-except-finally придумали with. Тот же код с with будет выглядеть так:
 rdir = "/mnt/sdcard/бла-бла-бла-путь-куда-хотим-писать/"
with open(rdir+"test.txt", "wt") as out_file:
    out_file.write('some text /n')             # пишем в файл какуюто ахинею
    # тут мы еще пишем 100500 строк кода, в котором может быть что угодно
    out_file.write('another  text /n')              # пишем в файл какуюто ахинею
out_file.close() писать не нужно, он должен сам закрыться по завершении блока with, даже если внутри with возникло исключение( хотя ктото гдето писал что в определенных случаях файл может не закрыться).
Блок with работает с объектами, значит все что пожелаешь запихнуть не получится. Для того чтобы корректно отработал блок нужно добавить в объект дополнительно еще два метода __enter__, __exit__
Некоторые встроенные объекты по умолчанию поддерживают протокол, например, файлы.
Вот тут можно прочитать подробнее на русском с поясненими про with https://habrahabr.ru/post/196382/

WellRai
И как этот файл записать в переменную?
в смысле? содержимое файла? так ты ж его на запись открываеш, он пустой создасться даже если такой файл уже есть.

WellRai
Спасибо за понятное объяснение!теперь я понял, почему ты использовал with. Насчёт того как записать файл в переменную,я имел в виду что-то в роде :
name=open (rdir+"test.txt", "wt")
Я не сразу понял то,что запись в какую-либо переменную в блоке with это (as название) :,а так все понятно.
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB