Пути к файлам
Если передать функции open() простое имя файла, такое как pi_digits.txt, Python ищет файл в том каталоге, в котором находится файл, выполняемый в настоящий момент (то есть файл программы .py).
В некоторых случаях (в зависимости от того, как организованы ваши рабочие файлы) открываемый файл может и не находиться в одном каталоге с файлом программы. Например, файл программы может находиться в каталоге python_work; в каталоге python_work создается другой каталог с именем text_files для текстовых файлов, с которыми работает программа. И хотя папка text_files находится в python_work, простая передача open() имени файла из text_files не подойдет, потому что Python проведет поиск файла в python_work и на этом остановится; поиск не будет продолжен во вложенном каталоге text_files. Чтобы открыть файлы из каталога, отличного от того, в котором хранится файл программы, необходимо указать путь — то есть приказать Python искать файлы в конкретном месте файловой системы.
Так как каталог text_files находится в python_work, для открытия файла из text_files можно воспользоваться относительным путем. Относительный путь приказывает Python искать файлы в каталоге, который задается относительно каталога, в котором находится текущий файл программы. В системе Linux и OS X это выглядит так:
with open(‘text_files/имя_файла.txt’) as file_object:
Эта строка означает, что файл .txt следует искать в каталоге text_files; она предполагает, что каталог text_files находится в python_work (так оно и есть). В системах Windows в путях к файлам вместо слеша (/) используется обратный слеш ():
with open(‘text_filesимя_файла.txt’) as file_object:
Также можно точно определить местонахождение файла в вашей системе независимо от того, где хранится выполняемая программа. Такие пути называются абсолютными и используются в том случае, если относительный путь не работает. Например, если каталог text_files находится не в python_work, а в другом каталоге (скажем, в каталоге с именем other_files), то передать open() путь ‘text_files/filename.txt’ не получится, потому что Python будет искать указанный каталог только внутри python_work. Чтобы объяснить Python, где следует искать файл, необходимо записать полный путь.
Абсолютные пути обычно длиннее относительных, поэтому их лучше сохранять в переменных, которые затем передаются open(). В Linux и OS X абсолютные пути выглядят так:
with open(file_path) as file_object:
В Windows они выглядят так:
file_path = ‘C:Usersehmatthesother_files ext_filesимя_файла.txt’
with open(file_path) as file_object:
С абсолютными путями вы сможете читать файлы из любого каталога вашей системы. Пока будет проще хранить файлы в одном каталоге с файлами программ или в каталогах, вложенных в каталог с файлами программ (таких как text_files из рассмотренного примера).
Иногда в системах семейства Windows слеш в пути к файлам интерпретируется правильно. Если вы используете Windows, но не получаете ожидаемых результатов, попробуйте использовать символы обратного слеша.
Как правильно задать путь к файлу в питоне?
Знаю, что вопрос глупый, но всегда, открывай файл так: cd Desktop и следующей командой шло python3 (имя файла с расширением .py)
начал проходить тему файлов, где можно открывать, как
F = open(‘имя файла с расширением’), на что он мне выдает
Traceback (most recent call last): File "", line 1, in FileNotFoundError: [Errno 2] No such file or directory: 'kl.py'
т.е. нет такого файла.
Вопрос, даже два. 1. Почему нужно постоянно задавать путь к файлу, когда в любом видео-уроке или же книге оно по умолчанию открывает файл без этой ошибки? И 2 вопрос, как правильно задать путь к файлу именно в команде F = open(«») не прибегая к топорному cd?
- Вопрос задан более трёх лет назад
- 60061 просмотр
1 комментарий
Простой 1 комментарий

А зачем делать open py-файлу?
Решения вопроса 2
senior software developer
как правильно задать путь к файлу именно в команде F = open(«») не прибегая к топорному cd?
как то так
with open(os.path.join('Desktop', 'kl.py')) as f: pass
Ответ написан более трёх лет назад
Нравится 3 5 комментариев
Евгений Колесов @jaimekoyl Автор вопроса
А почему он требует указать путь каждый раз при новой команде? Когда скажем в тех же уроках на ютюбе им это делать не приходиться. Им достаточно написать f = open с именем и расширением и не возникает ошибки.
ну учитывая что мне уроки отсюда не видать
ответить на этот вопрос очень сложно
но я предположу что файловая структура у вас немного отличается от того что есть в уроках
магии то там нет, питон одинаково работает
но я уже понял по-моему в чем состоит ваша проблема
вы путаете работу с текстовыми файлами
и работу с другими исходниками на питоне
исходники мы импортируем
другие файлы мы открываем
по-этому народ и недоумевал зачем вы хотите открыть .py файл, потому что это подразумевает что мы будем оттуда что-то читать или писать.
читают и пишут исходники обычно в редакторах
а в файлы читают и пишут обычно данные, конфиги и все остальное
Евгений Колесов @jaimekoyl Автор вопроса
Stanislav Pugachev, но опять же я открыл текстовый файл и дал ему расширение .py я почему-то воспринимаю его как текстовый файл, который грубо говоря работает с командами питона и скажем print будет не просто словом в тексте, а командой так ведь? разница ведь только в этом? т.е. файл просто набор текста, а файл с расширением .py модуль который работает с командами питона правильно?
Евгений Колесов,
нене, print будет просто словом в тексте, потому что командой он становится только после интерпретации
а до этого обычный текстовый файл и расширение у него может быть какое угодно
расширение файла например вообще опционально и существует как вспомогательная штука, а не как несущая какой-то технический смысл
Евгений Колесов @jaimekoyl Автор вопроса
Stanislav Pugachev, ну получается файлы с расширением txt мы открываем через file open, а с расширением .py мы импортируем, как import file(кстати пока не понимаю почему открывая терминал эта команда работает, а если в терминале вызвать питон и вписать это же, то он выдает синтаксическую ошибку(если написать import file(имя файла), а если просто указать import file, то он пишет нет имени файл(что в принципе логично), так и должно быть, что он работает в терменале до запуска питона? или тут я тоже допускаю ошибку?)
P.s. лимит комментариев кончился
P.s.s лимит на комменты пошел, а ответ на свой вопрос можно один раз добавлять, так что пишу здесь. Ваши (Stanislav Pugachev Stanislav Pugachev ) решения мне помогли, спасибо большое за терпение и советы!
Ответ написан более трёх лет назад
давайте еще раз по порядку
1) выкидываем книгу лутца
2) открываем https://docs.python.org/2/tutorial/modules.html и читаем первые 2 абзаца
3) дальше используем следующую терминологию
текстовый файл — любой файл с любым рассширением окромя бинарников
питон модуль — файл с инструкциями питона. чаще всего с расширением .py
теперь
мы можем открывать/закрывать/модифицировать текстовые файлы с помощь open().
мы можем импортировать модули из других скриптов (подробнее читаем доки по импортированию)
мы используем импорт для организации более сложных программ
мы используем текстовые файлы (с любым расширением txt, json, xml, html, csv. или вообще без расширения) обычно для хранения/чтения каких-то данных
теперь внимательно:
текст с исходным текстом на питоне (модуль) является частным случаем текстового файла, поэтому в теории вы можете выполнить любые действия с ним как с обычным текстовым файлом
но обычно это имеет смысл в том случае если у вас довольно специфическая задача по кодогенерации
то есть когда вы на лету в вашем же скрипте генерируете программу ( путем написания питон инструкций), сохраняете ее и запускаете программно ( но я сомневаюсь, что это то, что вы сейчас пытаетесь сделать осознанно)
мне ниодного «правильного ответа» не досталось?
Евгений Колесов @jaimekoyl Автор вопроса
Stanislav Pugachev, в комменты нельзя ставить правильный ответ к сожалению, а вчера не смог ответить т.к. лимиты не позволяли писать. Хотел поблагодарить за вчерашние советы, спасибо вам!
Ответы на вопрос 1
Анатолий @trofimovdev
структура
C:\Desktop\project ├── abc.txt ├── main.py ├── folder └── xyz.txt
Указываем абсолютный путь: C:\Desktop\project\abc.txt , C:\Desktop\project\folder\xyz.txt ,
либо
указываем относительный путь: abc.txt , folder\xyz.txt
P.S.: зачем открывать .py файл? Вместо этого можно написать import file 🙂
Ответ написан более трёх лет назад
Нравится 2 5 комментариев
Евгений Колесов @jaimekoyl Автор вопроса
а как работать с файлом тогда? грубо говоря мне нужно построчно его прочитать в интнрпретаторе, но для начала мне ведь нужно открыть в терминале, разве нет? Немного не понял вопрос — зачем его открывать

Евгений Колесов, если вы хотите выполнить инструкции в Python файле, его нужно импортировать, а не открыть и читать.
Дать возможность пользователю вводить путь к файлу

Дать возможность пользователю вводить путь к файлу
Как сделать чтобы пользователь указывал путь к файл вводу ну например D:\\input.txt ? Скиньте.
Дать пользователю возможность указать путь к файлу
Помогите зделать так чтобы Доступ к файлу, был возможен и задавался в диалоге с пользователем. вот.

Как дать пользователю возможность указать путь к файлу, с которого необходимо считать данные
Здравствуйте, необходимо разработать программу вычисляющую площади различных фигур, при этом данные.
Дать пользователю возможность вводить имя файла
Как сделать так чтобы пользователь сам выбирал название для создаваемого файла? что-то типо: .
1291 / 908 / 479
Регистрация: 05.12.2013
Сообщений: 3,073
1 2 3 4 5 6 7 8
from os import path directory = input() if path.exists(directory): print('Такая папка есть') else: print('Такой папки нет')
Регистрация: 21.07.2018
Сообщений: 7
Регистрация: 16.12.2019
Сообщений: 1
1 2 3 4 5 6
try: txt = input("Введите полный путь к файлу: ") file = open(txt, "r") print(file.read()) except FileNotFoundError: print("Ошибка: Файл не найден")
![]()
4615 / 2036 / 359
Регистрация: 17.03.2012
Сообщений: 10,103
Записей в блоге: 6
Долана, запрашивать путь можно по разному, если что.
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
Помогаю со студенческими работами здесь
MaskedTextBox (дать возможность пользователю вводить е-mail)
Помогите, пожалуйста, разобраться с MaskedTextBox! Надо дать возможность пользователю вводить.

Дать возможность пользователю вводить размер массива и его содержимое
Подскажите как сделать что бы количество чисел в массиве и сами числа задавал пользователь. ниже.
Дать пользователю возможность вводить информацию, какие данные нужно обработать
Задание: Объявите класс TString, создающий тип – строку. Элементы – данные класса: — указатель.

Дать возможность пользователю ввести путь к папке сохранения
1.Как дать возможность пользователю ввести путь к папке сохранения(если путь неверен\не существует).

Дать юзеру возможность вводить команды с параметрами
К утилите прикручена интерактивная оболочка, юзер вводит команду в ответ на которую выполняется.
Дать возможность с клавиатуры вводить номера меняемых слов
// ConsoleApplication7.cpp: определяет точку входа для консольного приложения. // #include.
Python-сообщество
![]()
- Начало
- » Python для новичков
- » Помогите указать путь к файлу
#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)