Работа с файлами в python: Работа с файлами

Язык программирования «Python». Работа с файлами в Python. Чтение и запись данных

Язык программирования «Python». Работа с файлами в Python. Чтение и запись данных

×

  • 1. Установка Python 3.7
  • 2. Варианты выполнения кода. Первая программа
  • 3. Объекты. Числа и операции над ними
  • 4. Переменные в Python. Оператор присваивания
  • 5. Функция input()
  • 6. Функция print()
  • 7. Деление нацело и деление по остатку
  • 8. Функции trunc, floor, ceil
  • 9. Деление нацело и по остатку отрицательных чисел в Python
  • 10. Логический тип Bool. Операции сравнения
  • 11. Cтроки и операции над ними
  • 12. Строки: индексы и срезы
  • 13. Строки и их методы
  • 14. Списки и операции над ними
  • 15. Списки: индексы и срезы
  • 16. Списки и их методы
  • 17. Условный оператор if
  • 18. Вложенный оператор if
  • 19. Множественный выбор elif
  • 20. Цикл while
  • 21. Обход всех цифр числа с помощью while
  • 22. Алгоритм Евклида
  • 23. Цикл while. Нахождение всех делителей числа
  • 24. Цикл while. Инструкции break, continue, else
  • 25.
    Функция range и итерируемые объекты
  • 26. Цикл for. Обход элементов функции range
  • 27. Цикл for. Обход списков и строк
  • 28. Установка, настройка и использование PyCharm
  • 29. Метод подсчета. Сортировка подсчетом Python
  • 30. Вложенные циклы
  • 31. Вложенные списки
  • 32. Треугольник Паскаля
  • 33. Множества в Python. Тип данных set
  • 34. Словари Python. Операции и методы словаря
  • 35. 4 Ситуации, где полезно использовать словарь
  • 36. Как отсортировать словарь в Python
  • 37. Кортежи (tuple). Операции и методы кортежей
  • 38. Функции (def). Определение и вызов функции
  • 39. Зачем нужны функции в программировании
  • 40. Возвращаемое значение функции. Оператор return
  • 41. Область видимости: локальная, глобальная и встроенная.
  • 42. Вложенные функции Python
  • 43. Замыкания в Python. Closure Python
  • 44. Замыкания в Python Часть 2
  • 45. Передача аргументов. Сопоставление аргументов по имени и позиции
  • 46. *args и **kwargs Python. Передача аргументов в функцию
  • 47. Рекурсия в Python. Рекурсивная функция Часть 1
  • 48. Рекурсия в Python. Рекурсивная функция Часть 2
  • 49. Рекурсивный обход файлов
  • 50. Функция enumerate
  • 51. Анонимная функция Lambda
  • 52. Генераторы списков Python | List comprehension
  • 53. Генераторы списков 2 | List comprehension | Вложенные генераторы списков
  • 54. Выражения-генераторы
  • 55. Функция генератор. Создание генератора при помощи yield
  • 56. Функция map Python.
  • 57. Функция filter
  • 58. Функция zip python
  • 59. Сортировка коллекций в Python. Метод sort и функция sorted
  • 60. Декораторы в Python Часть 1
  • 61. Декораторы в Python Часть 2
  • 62. Сортировка по ключу Python. Аргумент key
  • 63. Установка модулей в Python || Установка пакета Python
  • 64. Работа с файлами в Python. Чтение и запись данных
  • 65. Экранированные и служебные символы в Python
  • 66. Встроенная функция isinstance
  • 67. Функции all и any.
  • 68. Форматирование строк. Метод format
  • 69. F-строка
  • 70. Импорт стандартных модулей
  • 71. Импорт собственных модулей в Python
  • 72. 7 видов вызываемых (callable) объектов в Python
  • 73. Метод split и метод join Python
  • 74. Пакеты в Python. Файл __init__, переменная __all__
  • 75. Работаем с JSON в Python. Парсинг JSON, сохраняем JSON в файл
  • Следующие видео

    64. Работа с файлами в Python. Чтение и запись данных

    65. Экранированные и служебные символы в Python

    66. Встроенная функция isinstance

    67. Функции all и any.

    68. Форматирование строк. Метод format

    69. F-строка

    70. Импорт стандартных модулей

    71. Импорт собственных модулей в Python

    72. 7 видов вызываемых (callable) объектов в Python

    Как прочитать файлы в Python и решить проблему с кодировками

    На практике в реальных проектах Data Science часто приходится сталкиваться с чтением датасетов, а также записывать добытую в ходе вычислений информацию в файлы. Сегодня мы расскажем о работе с файлами в Python: чтение и запись, проблема с кодировками, добавление значений в конец файла, временные папки и файлы.

    Открываем, а затем читаем или записываем

    Предположим, у нас имеется файл, который нужно прочитать в Python. Для этого можно воспользоваться функцией open внутри контекстного менеджера:

    with open('file.txt') as f:
        data = f.read() # содержимое файла
    

    Таким же образом можно записать информацию в файл, указав w в качестве аргумента:

    text = 'Hello'
    with open('file.txt', 'w') as f:
        f.write(text)
    

    Отметим некоторые особенности данной функции. Во-первых, для чтения файла мы не указывали никаких аргументов кроме имени файла, поскольку по умолчанию уже стоит режим чтения. Мы также не указывали явно, что это именно текстовый файл, а не бинарный, так как это тоже стоит по умолчанию. Для чтения и записи бинарных файлов добавляется b, например, rb или wb.

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

    f = open('file.txt')
    f.read()
    f.close()
    

    На открытие файла Python выделяет память, поэтому, чтобы избежать ее утечки, рекомендуется закрывать файлы.

    Чтение файла с разной кодировкой

    На многих операционных системах Python в качестве стандарта кодирования использует UTF-8, который также поддерживает кириллицу. Тем не менее, часто можно столкнуться с проблемами неправильной кодировки и получить распространенную ошибку вроде этой:

    >>> f = open('somefile.txt', encoding='ascii')
    >>> f.read()
    Traceback (most recent call last):
      File "<stdin>", line 1, in <module>
      File "/usr/local/lib/Python3.8/encodings/ascii.py", line 26, in decode
        return codecs.ascii_decode(input, self.errors)[0]
    UnicodeDecodeError: 'ascii' codec can't decode byte 0xc3 in position
    12: ordinal not in range(128))
    

    В примере указана кодировка ASCII, но файл закодирован в другом формате, поэтому и возникает такая ошибка. Решить ее можно тремя способами:

    1. Указать erorr=replace, который заменит нераспознанные символы знаком
      ?
      :
      >>> f = open('somefile.txt', encoding='ascii', errors='replace')
      >>> f.read()
      'H?llo py?ho?-school!'
      
    2. Указать erorr=ignore, который проигнорирует нераспознанные символы:
      >>> f = open('somefile.txt', encoding='ascii', errors='replace')
      >>> f.read()
      'Hllo pyho-school!'
      
    3. Указать правильную кодировку. Если текст на русском языке, то можно посмотреть кодировки с поддержкой кириллицы, которые есть в документации Python. Например, явно указать UTF-8 или cp1251:
      f = open('somefile.txt', encoding='utf-8')
      # или cp1251
      f = open('somefile.txt', encoding='cp1251')
      
    Добавление в конец и запрет открытия файлов

    Как мы уже отметили ранее, для записи текстового файла добавляется аргумент w. Но если вызвать метод write, он перепишет весь файл. Во многих случаях требуется добавить данные в конец файла. Тогда используется a вместо w:

    text2 = 'world'
    with open('file.txt', 'a') as f:
        f.write(text)
    # Helloworld
    

    Если файла не существует, то при a и при w он будет создан. Но чтобы не трогать существующие файлы, а создать новый, передается параметр x:

    # 'x' не даст возможности открыть файл, так как он существует
    >>> with open('file.txt', 'x') as f:
    ...    f.write(text2)
    FileExistsError                           Traceback (most recent call last)
    
      FileExistsError: [Errno 17] File exists: 'file.txt'
    
    # Поскольку file2.txt не существует, все OK
    >>> with open('file2.txt', 'x') as f:
    ...    f.write(text2)
    
    Временные файлы

    Иногда бывает, что требуется создать файл или папку внутри Python-программы, а после ее закрытия их нужно удалить. Тогда пригодится стандартный модуль tempfile. Например, класс TemporaryFile создаст временный файл, который удалится после закрытия. Ниже пример в Python.

    >>> from tempfile import TemporaryFile
    >>> f = TemporaryFile("w+t")
    >>> f.write("hello")
    >>> f.seek(0)
    >>> f.read()
    'hello'
    >>> f.close() # файл уничтожается
    # либо в контекстном менеджере
        f.write(text2)
    

    Обратите внимание на 3 вещи. Первое, мы явно передаем "w+t", чтобы записать как текстовый файл, поскольку по умолчанию стоит "w+b" для бинарных файлов. Второе, метод seek(0) используется для перехода на самый первый символ, поскольку чтение происходит с текущего указателя, а он стоит в конце (после буквы ‘o’ в слове ‘hello’). Поэтому не стоит переживать, что мы можем стереть предыдущую запись:

    >>> f. seek(5) # переходим в конец
    >>> f.read()
    ''
    >>> f.write("world")
    5
    >>> f.seek(0) # переходим в начало
    >>> f.read()
    'helloworld'
    

    Третье, файл TemporaryFile невидим для файловой системы, он используется только внутри Python, поэтому извне будет трудно его найти.

    Именованные временные файлы

    А вот объекты класса NamedTemporaryFile будут видны файловой системе, и найти месторасположение можно с помощью атрибута name:

    >>> from tempfile import NamedTemporaryFile
    >>> f = NamedTemporaryFile("w+t")
    >>> f.name
    '/tmp/tmp60djsgli'
    >>> f.close()
    

    Как можно заметить, файл называется tmp60djsgli. Для удобства можно явно указать его название и формат:

    >>> f = NamedTemporaryFile("w+t", prefix="myfile", suffix=". txt")
    >>> f.name
    '/tmp/myfile7mxae0fi.txt'
    
    Временные папки

    Кроме временных файлов можно создавать временные папки. Для этого используется класс TemporaryDirectory:

    >>> from tempfile import TemporaryDirectory
    >>> d = TemporaryDirectory()
    >>> d.name
    '/tmp/tmp5eadqzz5'
    

    Он также принимает в качестве аргументов prefix и suffix, а также может использоваться внутри контекстного менеджера Python.

     

    В следующей статье поговорим о взаимодействии файловой системы и Python. А получить практические навыки работы с файлами на реальных проектах Data Science вы сможете на наших курсах по Python в лицензированном учебном центре обучения и повышения квалификации IT-специалистов в Москве.

    Смотреть расписание

    Записаться на курс

    Источники

    1. https://docs.python.org/3/library/functions.html#open
    2. https://docs. python.org/3/library/tempfile.html

    Открыть файл Python

    ❮ Назад Далее ❯


    Работа с файлами — важная часть любого веб-приложения.

    Python имеет несколько функций для создания, чтения, обновления и удаление файлов.


    Обработка файлов

    Ключевой функцией для работы с файлами в Python является функция open() .

    Функция open() принимает два параметра; имя файла и режим .

    Существует четыре различных метода (режима) открытия файла:

    "r" — Чтение — Значение по умолчанию. Открывает файл для чтения, ошибка, если файл не существует

    "a" — Append — открывает файл для добавление, создает файл, если он не существует

    "w" — Write — открывает файл для записи, создает файл, если он не существует

    "x" — Create — создает указанный файл, возвращает ошибка, если файл существует

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

    "t" — Текст — Значение по умолчанию. Текстовый режим

    "b" — Двоичный — Двоичный режим (напр. images)


    Синтаксис

    Чтобы открыть файл на чтение, достаточно указать имя файла:

    f = open(«demofile.txt»)

    Приведенный выше код аналогичен:

    f = open(«demofile.txt», «rt»)

    Потому что "r" для чтения и "t" для текста являются значениями по умолчанию, указывать их не нужно.

    Примечание: Убедитесь, что файл существует, иначе вы получите сообщение об ошибке.


    ❮ Предыдущий Далее ❯


    NEW

    Мы только что запустили
    Видео W3Schools

    Узнать

    COLOR PICKER
    КОД ИГРЫ

    Играть в игру




    Top Tutorials
    Учебное пособие по HTML
    Учебное пособие по CSS
    Учебное пособие по JavaScript
    Учебное пособие
    Учебное пособие по SQL
    Учебное пособие по Python
    Учебное пособие по W3. CSS
    Учебник по Bootstrap
    Учебник по PHP
    Учебник по Java
    Учебник по C++
    Учебник по jQuery

    Лучшие ссылки
    Справочник по HTML
    Справочник по CSS
    Справочник по JavaScript
    Справочник по SQL
    Справочник по Python
    Справочник по W3.CSS
    Справочник по Bootstrap
    Справочник по PHP
    Цвета HTML
    Справочник по Java
    Справочник по Angular
    Справочник по jQuery


    Top Examples Примеры HTML
    Примеры CSS
    Примеры JavaScript
    How To Примеры
    Примеры SQL
    Примеры Python
    Примеры W3.CSS
    Примеры Bootstrap
    Примеры PHP
    Примеры Java
    Примеры XML
    Примеры jQuery


    FORUM | О

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

    Copyright 1999-2022 Refsnes Data. Все права защищены.
    W3Schools использует W3.CSS.

    Глава 8. Работа с файлами — Документация по Python 101 1.0

    В этой главе рассказывается о чтении и записи данных в файлы на жестком диске. Вы обнаружите, что чтение и запись файлов в Python очень просты. Давайте начнем!

    Как читать файл

    В Python есть встроенная функция open , которую мы можем использовать, чтобы открыть файл для чтения. Создайте текстовый файл с именем «test.txt» со следующим содержимым:

     Это тестовый файл
    строка 2
    строка 3
    эта строка намеренно оставлена ​​пустой
     

    Вот несколько примеров, которые показывают, как использовать open для чтения:

     handle = open("test.txt")
    handle = open(r"C:\Users\mike\py101book\data\test.txt", "r")
     

    Первый пример открывает файл с именем test. txt в режиме только для чтения. Это режим по умолчанию функции open . Обратите внимание, что мы не передали полный путь к файлу, который хотели открыть в первом примере. Python будет автоматически искать в папке, в которой запущен скрипт, test.txt . Если он не найдет его, вы получите IOError.

    Во втором примере показан полный путь к файлу, но вы заметите, что он начинается с «r». Это означает, что мы хотим, чтобы Python обрабатывал строку как необработанную строку. Давайте рассмотрим разницу между указанием исходной строки и обычной строки:

     >>> print("C:\Users\mike\py101book\data\test.txt")
    C:\Пользователи\Майк\py101book\данные est.txt
    >>> print(r"C:\Users\mike\py101book\data\test.txt")
    C:\Пользователи\Майк\py101book\data\test.txt
     

    Как видите, когда мы не указываем его как необработанную строку, мы получаем недопустимый путь. Почему это происходит? Ну, как вы, возможно, помните из главы о строках, существуют определенные специальные символы, которые необходимо экранировать, например «n» или «t». В этом случае мы видим, что есть «t» (то есть табуляция), поэтому строка послушно добавляет табуляцию к нашему пути и портит его для нас.

    Второй аргумент во втором примере также является «r». Это сообщает open , что мы хотим открыть файл в режиме только для чтения. Другими словами, он делает то же самое, что и первый пример, но более явно. Теперь давайте на самом деле прочитаем файл!

    Поместите следующие строки в сценарий Python и сохраните его в том же месте, что и файл test.txt:

     handle = open("test.txt", "r")
    данные = дескриптор.чтение()
    печать (данные)
    ручка.закрыть()
     

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

    Давайте рассмотрим различные способы чтения файлов.

     дескриптор = открыть ("test.txt", "r")
    data = handle.readline() # прочитать только одну строку
    печать (данные)
    ручка.закрыть()
     

    Если вы запустите этот пример, он прочитает только первую строку вашего текстового файла и распечатает ее. Это не слишком полезно, поэтому давайте попробуем метод readlines() дескриптора файла:

     handle = open("test.txt", "r")
    data = handle.readlines() # прочитать ВСЕ строки!
    печать (данные)
    ручка.закрыть()
     

    После запуска этого кода вы увидите список Python, напечатанный на экране, потому что это то, что возвращает метод readlines : список! Давайте на минутку научимся читать файл небольшими порциями.

    Как читать файлы по частям

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

     дескриптор = открыть ("test.txt", "r")
    для строки в ручке:
        печать (строка)
    ручка.закрыть()
     

    Здесь мы открываем дескриптор файла, доступный только для чтения, а затем используем цикл for для итерации по нему. Вы обнаружите, что можете перебирать все виды объектов в Python (строки, списки, кортежи, ключи в словаре и т. д.). Это было довольно просто, верно? Теперь давайте делать это кусками!

     дескриптор = открыть ("test.txt", "r")
    пока верно:
        данные = дескриптор.чтение(1024)
        печать (данные)
        если не данные:
            ломать
     

    В этом примере мы используем цикл Python while для чтения по килобайту файла за раз. Как вы, наверное, знаете, килобайт — это 1024 байта или символа. Теперь давайте представим, что мы хотим прочитать двоичный файл, например PDF.

    Как читать двоичный файл

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

     handle = open("test.pdf", "rb")
     

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

    Запись файлов в Python

    Если вы следили за этим, вы, вероятно, догадались, что означает флаг файлового режима для записи файлов: «w» и «wb» для режима записи и двоичного режима записи. Давайте рассмотрим простой пример, хорошо?

    ВНИМАНИЕ : При использовании режимов «w» или «wb», если файл уже существует, он будет перезаписан без предупреждения! Вы можете проверить, существует ли файл, прежде чем открывать его, используя Python 9. Модуль 0070 или . См. раздел os.path.exists в , глава 16 .

     дескриптор = открыть ("test.txt", "w")
    handle.write("Это тест!")
    ручка.закрыть()
     

    Это было просто! Все, что мы здесь сделали, это изменили режим файла на «w» и вызвали метод дескриптора файла write , чтобы записать некоторый текст в файл. Дескриптор файла также имеет метод writelines , который принимает список строк, которые дескриптор затем записывает на диск по порядку.

    Использование with Operator

    Python имеет маленькую аккуратную встроенную функцию with , которую вы можете использовать для упрощения чтения и записи файлов. Оператор с оператором создает в Python так называемый менеджер контекста , который автоматически закроет файл, когда вы закончите его обработку. Давайте посмотрим, как это работает:

     с open("test.txt") в качестве file_handler:
        для строки в file_handler:
            печать (строка)
     

    Синтаксис для с оператором немного странный, но разберетесь довольно быстро. По сути, мы заменяем:

     handle = open("test.txt")
     

    с этим:

     с open("test.txt") как file_handler:
     

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

    Обнаружение ошибок

    Иногда при работе с файлами случаются неприятные вещи. Файл заблокирован, потому что его использует какой-то другой процесс или у вас есть какая-то ошибка разрешения. Когда это произойдет, вероятно, произойдет ошибка IOError . В этом разделе мы рассмотрим, как отлавливать ошибки обычным способом и как их отлавливать с помощью с оператором . Подсказка: идея в основном одинакова в обоих!

     попробуйте:
        file_handler = открыть ("test.txt")
        для строки в file_handler:
            печать (строка)
    кроме IOError:
        print("Произошла ошибка ввода-вывода!")
    в конце концов:
        file_handler.close()
     

    В приведенном выше примере мы заключаем обычный код в конструкцию try/except . При возникновении ошибки мы выводим сообщение на экран. Обратите внимание, что мы также закрываем файл, используя finally 9.Заявление 0071. Теперь мы готовы посмотреть, как бы мы сделали то же самое, используя с :

     попробуйте:
        с open("test.txt") как file_handler:
            для строки в file_handler:
                печать (строка)
    кроме IOError:
        print("Произошла ошибка ввода-вывода!")
     

    Как вы могли догадаться, мы просто завернули блок в блок так же, как и в предыдущем примере. Разница здесь в том, что нам не нужен оператор finally , поскольку менеджер контекста обрабатывает его за нас.

  • Оставить комментарий

    Добавить комментарий

    Ваш адрес email не будет опубликован. Обязательные поля помечены *