Уведомления

Группа в Telegram: @pythonsu

#1 Май 14, 2017 10:54:12

WellRai
Зарегистрирован: 2017-05-13
Сообщения: 4
Репутация: +  0  -
Профиль   Отправить e-mail  

Помогите указать путь к файлу

Я установил qpython на андроид и дорабатываю программы в этой среде:
Мне нужно указать путь к файлу,но это ведь отличная от Виндовс файловая система ,как это сделать
Пример :file = open(“. ”,“w”)   
⬆️
Что писать тут

Офлайн

#2 Май 14, 2017 13:33:55

PEHDOM
Зарегистрирован: 2016-11-28
Сообщения: 2196
Репутация: +  294  -
Профиль   Отправить e-mail  

Помогите указать путь к файлу

у андроидов ноги растут из линукса соответвенно пути к файлам должны бывть “как в линуксе”
приверно так:

 rdir = "/mnt/sdcard/бла-бла-бла-путь-куда-хотим-писать/"
with open(rdir+"test.txt", "wt") as out_file:
...........



==============================
Помещайте код в теги:
[code python][/code]
Бериегите свое и чужое время.

Отредактировано PEHDOM (Май 14, 2017 13:34:52)

Офлайн

#3 Май 15, 2017 12:17:10

WellRai
Зарегистрирован: 2017-05-13
Сообщения: 4
Репутация: +  0  -
Профиль   Отправить e-mail  

Помогите указать путь к файлу

Спасибо​, только есть несколько вопросов: почему ты это делаешь через оператор with ?И как этот файл записать в переменную?

Офлайн

#4 Май 15, 2017 14:14:22

PEHDOM
Зарегистрирован: 2016-11-28
Сообщения: 2196
Репутация: +  294  -
Профиль   Отправить e-mail  

Помогите указать путь к файлу

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
И как этот файл записать в переменную?
в смысле? содержимое файла? так ты ж его на запись открываеш, он пустой создасться даже если такой файл уже есть.



==============================
Помещайте код в теги:
[code python][/code]
Бериегите свое и чужое время.

Отредактировано PEHDOM (Май 15, 2017 14:17:18)

Офлайн

#5 Май 15, 2017 16:15:26

WellRai
Зарегистрирован: 2017-05-13
Сообщения: 4
Репутация: +  0  -
Профиль   Отправить e-mail  

Помогите указать путь к файлу

Спасибо за понятное объяснение!теперь я понял, почему ты использовал with. Насчёт того как записать файл в переменную,я имел в виду что-то в роде :

name=open (rdir+"test.txt", "wt")
Я не сразу понял то,что запись в какую-либо переменную в блоке with это (as название) :,а так все понятно.

Отредактировано WellRai (Май 15, 2017 18:24:06)

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version