Укажите полный путь к текстовому файлу readme, если вы знаете, что он хранится в папке справки

Обновлено: 30.06.2024

Вывод: в этом руководстве вы узнаете, как проверить, существует ли файл.

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

Для этого вы можете использовать функцию exists() из модуля os.path или метод is_file() из класса Path в модуле pathlib.

функция os.path.exists()

Метод Path.is_file()

1) Использование функции os.path.exists() для проверки существования файла

Чтобы проверить, существует ли файл, вы передаете путь к файлу функции exists() из стандартной библиотеки os.path.

Сначала импортируйте стандартную библиотеку os.path:

Во-вторых, вызовите функцию exists():

Если файл существует, функция exists() возвращает значение True . В противном случае возвращается False .

Если файл находится в той же папке, что и программа, path_to_file — это просто имя файла.

Однако это не так, вам нужно передать полный путь к файлу. Например:

Даже если вы запускаете программу в Windows, вы должны использовать косую черту ( / ) для разделения пути. Он будет работать в Windows, macOS и Linux.

В следующем примере используется функция exists() для проверки существования файла readme.txt в той же папке, что и программа:

Если файл readme.txt существует, вы увидите следующий вывод:

В противном случае на экране появится False:

Чтобы сделать вызов функции exists() короче и более очевидным, вы можете импортировать эту функцию и переименовать ее в функцию file_exists() следующим образом:

2) Использование модуля pathlib для проверки существования файла

Python представил модуль pathlib начиная с версии 3.4.

Модуль pathlib позволяет вам манипулировать файлами и папками, используя объектно-ориентированный подход. Если вы не знакомы с объектно-ориентированным программированием, ознакомьтесь с разделом Python OOP.

Сначала импортируйте класс Path из модуля pathlib:

Затем создайте экземпляр нового экземпляра класса Path и инициализируйте его путем к файлу, существование которого вы хотите проверить:

Наконец, проверьте, существует ли файл, используя метод is_file():

Если файл не существует, метод is_file() возвращает значение False. В противном случае возвращается True .

Графические пользовательские интерфейсы могут быть великолепными, но если вы уже работаете в своем любимом терминале, зачем вам запускать другое приложение для создания нового файла или каталога? В зависимости от ситуации вы, вероятно, не захотите этого делать, и, к счастью, существуют инструменты командной строки, которые чрезвычайно упрощают создание новых каталогов и файлов.

Начало работы

Если вы еще не работаете в своем любимом терминальном приложении, я бы посоветовал запустить его и продолжить.

Скорее всего, вы находитесь в своем домашнем каталоге. Это нормально, но если вы хотите избавить себя от очистки файлов и каталогов позже, вы можете использовать cd /tmp .

Все файлы, которые вы создаете в /tmp, будут удалены при следующей перезагрузке, что избавит вас от проблем.

Создание каталога

Давайте начнем с создания каталога рептилий, который мы будем использовать в следующих примерах. Чтобы создать каталог, вы будете использовать команду mkdir, за которой следует имя каталога, который вы хотите создать:

Создание нескольких каталогов

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

Для этого мы можем указать несколько каталогов, которые мы хотели бы создать, в качестве аргументов команды mkdir:

Быстрый ls показывает, что теперь у нас есть три каталога внутри нашего каталога рептилий.

Создание вложенных каталогов

Можно подумать, что передача ряда каталогов в mkdir приведет к созданию вложенных каталогов.

Вы правы только наполовину, так как что-то вроде mkdir turtle/images сообщит нам, что каталог не может быть создан, поскольку такого файла или каталога не существует.

Если бы мы попробовали mkdir змея/изображения, все было бы в порядке, потому что каталог змеи уже существует.

Чтобы сообщить mkdir, что мы хотели бы попытаться создать каждый каталог в пути, мы используем аргумент -p или --parents:

Аргумент --parents создает каждый каталог по пути и может использоваться для создания столько каталогов, сколько вам нужно и/или поддерживает операционная система:

Запуск древовидной ящерицы покажет ряд только что созданных вложенных каталогов.

Создание каталогов в нескольких каталогах

Чтобы создать каталог с именем video внутри каталогов alligator и crocodile, мы могли бы указать пути к обоим каталогам:

Обмен именами файлов позволяет нам добиться этого с помощью более простого синтаксиса:

Создание пустого файла

Теперь, когда у нас создана целая куча каталогов, давайте попробуем создать несколько файлов.

Самый простой способ создать файл, особенно пустой, — использовать команду touch:

Если файл уже существует, сенсор не будет жаловаться. Что он будет делать, так это устанавливать время изменения файла на текущее время, эффективно касаясь файла!

Создание пустых файлов

Подобно тому, как mkdir может принимать несколько путей, touch может делать то же самое:

Или использование blobbing имен файлов:

Создание пустых файлов в нескольких каталогах

Использование touch не ограничивается только именами файлов, вы также можете указать пути к файлам:

Чтобы сделать еще один шаг вперед, вы можете использовать предыдущий совет по созданию больших двоичных объектов и с легкостью создавать новые пустые файлы в нескольких каталогах:

Еще одним шагом будет создание нескольких файлов в нескольких каталогах с дополнительными BLOB-объектами:

Создание файла с текстом

Пустые файлы — это хорошо, но они не помогут вам. Используя команду echo и оператор >, мы можем создать совершенно новый файл и заполнить его текстом, даже не открывая текстовый редактор:

Однако будьте осторожны, > означает создание или перезапись файла. Если файл уже существует, его содержимое будет полностью перезаписано!

Более безопасный подход — использовать >> в сценариях, где файл может существовать. Это создаст файл и добавит к нему текст. Если файл существует, текст будет добавлен в его конец:

Создание файла с выходным файлом

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

Например, если вы хотите создать файл, содержащий список всех файлов *.txt в каталоге, вы можете:

Запуск cat directory.txt показывает выходные данные команды ls, которые теперь хранятся в directory.txt .

Заключение

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

Самое важное преимущество командной строки над приложением с графическим интерфейсом – это быстрота и простота создания нескольких файлов и каталогов.

Такая задача, как создание более 10 вложенных каталогов, вызовет судороги при работе с мышью и лишь тривиально быстрее при использовании горячих клавиш. Командная строка может многое сделать всего одной или двумя командами.

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

Используйте команды, которые мы уже изучили, чтобы перейти в каталог shell_data/untrimmed_fastq, если вы еще этого не сделали.

Что, если мы хотим вернуться назад и выйти из этого каталога в наш каталог верхнего уровня? Можем ли мы ввести cd shell_data ? Попробуйте и посмотрите, что получится.

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

У нас есть специальная команда, которая сообщает компьютеру, что нужно переместить нас назад или вверх на один уровень каталога.

Теперь мы можем использовать pwd, чтобы убедиться, что находимся в каталоге, к которому собирались перейти, и ls, чтобы проверить правильность содержимого каталога.

Из этого вывода видно, что .. действительно возвращает нас на один уровень назад в нашей файловой системе.

Вы можете связать их вместе следующим образом:

распечатывает содержимое /home .

Поиск скрытых каталогов

Сначала перейдите в каталог shell_data. В этом каталоге есть скрытый каталог. Изучите параметры ls, чтобы узнать, как увидеть скрытые каталоги. Перечислите содержимое каталога и определите имя текстового файла в этом каталоге.

Подсказка: скрытые файлы и папки в Unix начинаются с . , например .my_hidden_directory

Решение

Сначала используйте команду man, чтобы просмотреть параметры ls .

Опция -a является сокращением от all и говорит, что она заставляет ls «не игнорировать записи, начинающиеся с ». Это тот вариант, который нам нужен.

Имя скрытого каталога — .hidden . Мы можем перейти в этот каталог, используя cd .

А затем выведите список содержимого каталога с помощью ls .

Имя текстового файла — youfoundit.txt .

В большинстве команд флаги можно комбинировать в произвольном порядке для получения желаемых результатов/вывода.

Просмотр содержимого других каталогов

По умолчанию команды ls выводят список содержимого рабочего каталога (то есть каталога, в котором вы находитесь).Вы всегда можете найти каталог, в котором находитесь, с помощью команды pwd. Однако вы также можете указать ls имена других каталогов для просмотра. Перейдите в свой домашний каталог, если вы еще этого не сделали.

Затем введите команду:

Это отобразит содержимое каталога shell_data, и вам не нужно будет туда переходить.

Команда cd работает аналогичным образом.

Это приведет вас к каталогу untrimmed_fastq без необходимости перехода через промежуточный каталог.

Практика навигации

Перейдите в свой домашний каталог. Оттуда перечислите содержимое каталога untrimmed_fastq.

Решение

Полный и относительный пути

Команда cd принимает в качестве аргумента имя каталога. Каталоги можно указать с помощью относительного пути или полного абсолютного пути. Каталоги на компьютере организованы в иерархию. Полный путь сообщает вам, где находится каталог в этой иерархии. Перейдите в домашний каталог и введите команду pwd.

Это полное имя вашего домашнего каталога. Это говорит вам, что вы находитесь в каталоге с именем dcuser, который находится внутри каталога с именем home, который находится в самом верхнем каталоге в иерархии. На самом верху иерархии находится каталог с именем /, который обычно называют корневым каталогом. Итак, подведем итог: dcuser — это каталог в доме, который является каталогом в / . Подробнее о root и home в следующем разделе.

Теперь введите следующую команду:

Это позволяет перейти на несколько уровней вперед к каталогу .hidden. Теперь вернитесь в домашний каталог.

Вы также можете перейти в каталог .hidden, используя:

Эти две команды имеют одинаковый эффект, они обе ведут нас в каталог .hidden. Первый использует абсолютный путь, задавая полный адрес из домашнего каталога. Второй использует относительный путь, задавая только адрес из рабочего каталога. Полный путь всегда начинается с / . Относительный путь — нет.

Относительный путь подобен получению указаний от кого-то на улице. Они говорят вам «идти направо на знаке остановки, а затем повернуть налево на главную улицу». Это отлично работает, если вы стоите там вместе, но не так хорошо, если вы пытаетесь рассказать кому-то, как туда добраться из другой страны. Полный путь подобен GPS-координатам. Он точно сообщает вам, где что находится, независимо от того, где вы сейчас находитесь.

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

Со временем вам станет легче запоминать структуру используемых вами каталогов и способы быстрой навигации по ним.

Относительное разрешение пути

  1. ../backup: Нет такого файла или каталога
  2. 01.12.2012 08.01.2013 27.01.2013
  3. 01.12.2012/08.01.2013/27.01.2013/
  4. исходный pnas_final pnas_sub

Решение

  1. Нет: есть резервная копия каталога в /Users .
  2. Нет: это содержимое Users/thing/backup , но с .. мы запросили один уровень выше.
  3. Нет: см. предыдущее объяснение. Кроме того, мы не указали -F для отображения / в конце имен каталогов.
  4. Да: ../backup относится к /Users/backup .

Быстрые клавиши навигации

Корневой каталог — это каталог самого высокого уровня в вашей файловой системе, содержащий файлы, важные для ежедневной работы вашего компьютера. Хотя вы будете использовать корень ( / ) в начале ваших абсолютных путей, важно избегать работы с данными в этих каталогах более высокого уровня, поскольку ваши команды могут навсегда изменить файлы, необходимые для работы операционной системы. Во многих случаях для запуска команд в корневых каталогах потребуются специальные разрешения, которые здесь не обсуждаются, поэтому лучше избегать их и работать в своем домашнем каталоге. Работа с домашним каталогом очень распространена. Символ тильды ~ — это ярлык для вашего домашнего каталога. В нашем случае корневой каталог находится на два уровня выше нашего домашнего каталога, поэтому cd или cd ~ приведет вас к /home/dcuser, а cd / приведет вас к / . Перейдите в каталог shell_data:

Затем введите команду:

Это распечатает содержимое вашего домашнего каталога, и вам не нужно вводить полный путь.

Команды cd и cd ~ очень полезны для быстрого возврата в домашний каталог. В последующих уроках мы будем использовать символ ~ для указания нашего домашнего каталога.

В приведенных нами примерах и в смоделированной файловой системе, которую мы создали для этого онлайн-учебника, все файлы находятся в одном каталоге, и это тот же каталог, где хранится программа Python.Таким образом, мы можем просто написать open('myfile.txt', 'r') .

Если вы установили Python на свой локальный компьютер и пытаетесь заставить работать операции чтения и записи файлов, возможно, вам нужно понять еще кое-что. Компьютерные операционные системы (такие как Windows и Mac OS) организуют файлы в виде иерархии папок, где одни папки содержат другие папки.

../_images/ExampleFileHierarchy.jpg

Если ваш файл и ваша программа Python находятся в одном каталоге, вы можете просто использовать имя файла. Например, в иерархии файлов на диаграмме файл myPythonProgram.py может содержать код open('data1.txt', 'r') .

Однако, если ваш файл и ваша программа Python находятся в разных каталогах, вам необходимо указать путь. Вы можете думать об имени файла как о коротком имени файла, а о пути как о полном имени. Как правило, вы указываете относительный путь к файлу, который указывает, где найти файл для открытия относительно каталога, из которого выполняется код. Например, файл myPythonProgram.py может содержать код open('../myData/data2.txt', 'r') . ../ означает переход на один уровень вверх в структуре каталогов, к содержащей папку (allProjects); myData/ предлагает спуститься в подпапку myData.

Также можно использовать абсолютный путь к файлу. Например, предположим, что файловая структура на рисунке хранится на компьютере в домашнем каталоге пользователя /Users/joebob01/myFiles. Затем код в любой программе Python, работающей из любой папки с файлами, может открывать data2.txt через open('/Users/joebob01/myFiles/allProjects/myData/data2.txt', 'r') . Вы можете указать абсолютный путь к файлу, потому что он начинается с / . Если вы когда-нибудь переместите свои программы и данные на другой компьютер (например, чтобы поделиться ими с кем-то еще), будет гораздо удобнее, если вы будете использовать относительные пути к файлам, а не абсолютные. Таким образом, если вы сохраните структуру папок при перемещении всего, вам не нужно будет менять свой код. Если вы используете абсолютные пути, то человек, с которым вы делитесь, вероятно, не имеет того же имени домашнего каталога, /Users/joebob01/ . Обратите внимание, что пути к файлам Python соответствуют соглашениям UNIX (Mac OS является вариантом UNIX), а не пути к файлам Windows, в которых используются : и \ . Интерпретатор Python будет переводить имена путей Windows при работе на компьютере с Windows; вы должны иметь возможность совместно использовать свою программу Python между компьютером Windows и MAC без необходимости переписывать команды открытия файла.

В целях безопасности наш код, работающий в вашем браузере, не читает и не записывает файлы в файловую систему вашего компьютера. Позже, когда вы запустите Python на своем компьютере, вы сможете по-настоящему читать файлы, используя имена путей, как было предложено выше. Чтобы вы начали, мы подделали его, предоставив несколько файлов, которые вы можете прочитать, как если бы они находились на вашем жестком диске. В этой главе мы моделируем существование одного текстового файла; вы не можете открывать какие-либо другие файлы с вашего локального компьютера из кода учебника, запущенного в вашем браузере.

Читайте также: