Рубрики
Без рубрики

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

Обработка файлов Python. Теги с Python, начинающими, электронными книгами, упражнениями.

100 страница Python Intro (20 частей серии)

Эта глава обсудит Открыть () Встроенная функция и некоторые из встроенных модулей для обработки файлов.

открыть и закрыть

Открыть () Встроенная функция является одним из способов чтения и записи файлов. Первый аргумент этой функции – это имя файла для обработки. Имя файла является относительным/абсолютным путем к расположению файла. Отдых – это аргументы ключевых слов, которые вы можете настроить. Вывод – это TextioWrapper Объект (то есть filehandle), который вы можете использовать в качестве итератора. Вот пример:

# default mode is rt i.e. read text
>>> fh = open('ip.txt')
>>> fh
<_io.TextIOWrapper name='ip.txt' mode='r' encoding='UTF-8'>
>>> next(fh)
'hi there\n'
>>> next(fh)
'today is sunny\n'
>>> next(fh)
'have a nice day\n'
>>> next(fh)
Traceback (most recent call last):
  File "", line 1, in 
StopIteration

# check if the filehandle is active or closed
>>> fh.closed
False
# close the filehandle
>>> fh.close()
>>> fh.closed
True

Режим Аргумент указывает, какую обработку вы хотите. Только текст Режим будет охвачен в этой главе, что является значением по умолчанию. Вы можете объединить варианты, например RB означает читать в бинарный режим. Вот соответствующие данные из документации:

  • 'R' Открыт для чтения (по умолчанию)
  • 'w' открыт для письма, сначала урезать файл
  • 'x' Открыть для эксклюзивного создания, не удалось Если файл уже существует
  • «А» открыть для письма, добавление к концу файла Если он существует
  • 'B' Двоичный режим
  • ' T ' Текстовый режим (по умолчанию)
  • '+ ' открыт для обновления (чтение и запись)

кодирование Аргумент значима только в текст режим. Вы можете проверить кодировку по умолчанию для вашей среды, используя локаль модуль, как показано ниже. Посмотреть Docs.ython: стандартные кодировки и Docs.Ython: Unicode Больше подробностей.

>>> import locale
>>> locale.getpreferredencoding()
'UTF-8'

Вот как Python обрабатывает разделение линии по умолчанию, см. Документацию для более подробной информации.

На входе, если Новая линия это Нет Включено универсальный режим Newlines. Линии на входе могут закончиться '\ N' , '\ R' или '\ R \ N' и они переведены в '\ N' прежде чем быть возвращенным к абонеру.

На выходе, если Новая линия это Нет любой '\ N' Письменные символы переводятся на систему разделителя линии по умолчанию, OS.Linesep Отказ

Если данное имя файла не существует, вы получите FileNotFoundError исключение.

>>> open('xyz.txt', 'r', encoding='ascii')
Traceback (most recent call last):
  File "", line 1, in 
FileNotFoundError: [Errno 2] No such file or directory: 'xyz.txt'

Менеджер контекста

Цитирование из Docs.ython: чтение и запись файлов :

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

# read_file.py
with open('ip.txt', 'r', encoding='ascii') as f:
    for ip_line in f:
        op_line = ip_line.rstrip('\n').capitalize() + '.'
        print(op_line)

Напомним, что как Ключевое слово было введено в попробуйте, кроме раздел. Вот вывод вышеуказанной программы:

$ python3.9 read_file.py
Hi there.
Today is sunny.
Have a nice day.

Посмотреть Магия контекста Python Contectex Больше подробностей.

читать, readline и readleines

Читать () Способ дает вам все оставшееся содержимое файла как единую строку. readline () Способ дает следующую строку текста и Readleines () дает все оставшиеся линии как Список струн.

>>> open('ip.txt').read()
'hi there\ntoday is sunny\nhave a nice day\n'

>>> fh = open('ip.txt')
# 'readline' is similar to 'next'
# but returns empty string instead of StopIteration exception
>>> fh.readline()
'hi there\n'
>>> fh.readlines()
['today is sunny\n', 'have a nice day\n']
>>> fh.readline()
''

записывать

# write_file.py
with open('op.txt', 'w', encoding='ascii') as f:
    f.write('this is a sample line of text\n')
    f.write('yet another line\n')

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

$ python3.9 write_file.py 

$ cat op.txt
this is a sample line of text
yet another line

$ file op.txt
op.txt: ASCII text

Если файл уже существует, W Режим перезапишет содержимое (то есть существующий контент будет потерян).

Вы также можете использовать Печать () Функция для записи, передавая файлнул на Файл аргумент Модуль fileInput . Поддерживает редактирование и другие функции (примеры будут обсуждаться позже).

Модули обработки файлов

Этот раздел дает вводные примеры для некоторых встроенных модулей, которые удобны для обработки файлов. Цитирование из docs.yphon: OS :

Этот модуль обеспечивает портативный способ использования функциональности зависимой системы операционной системы.

>>> import os

# current working directory
>>> os.getcwd()
'/home/learnbyexample/Python/programs/'

# value of an environment variable
>>> os.getenv('SHELL')
'/bin/bash'

# file size
>>> os.stat('ip.txt').st_size
40

# check if given path is a file
>>> os.path.isfile('ip.txt')
True

Цитирование из docs.yphon: Glob :

Модуль GLOCH находит все пути, соответствующие указанному рисунку в соответствии с правилами, используемыми оболочкой UNIX, хотя результаты возвращаются в произвольном порядке. Расширение тильды не сделано, но * , ? , а также Диапазоны персонажей, выраженные с [] будет правильно подобран.

>>> import glob

# list of files (including directories) containing '_file' in their name
>>> glob.glob('*_file*')
['read_file.py', 'write_file.py']

Цитирование из docs.ython: забил :

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

>>> import shutil

>>> shutil.copy('ip.txt', 'ip_file.txt')
'ip_file.txt'
>>> glob.glob('*_file*')
['read_file.py', 'ip_file.txt', 'write_file.py']

Цитирование из Docs.ython: Pathlib :

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

>>> from pathlib import Path

# use 'rglob' instead of 'glob' if you want to match names recursively
>>> list(Path('programs').glob('*file.py'))
[PosixPath('programs/read_file.py'), PosixPath('programs/write_file.py')]

Посмотреть Модуль PATHLIB: укрытие файловой системы и Stackoverflow: Как я могу перейти за файлы в данном каталоге? Для более подробной информации и примеров.

Существуют специализированные модули для обработки структурированных данных, а также, например:

Упражнения

  • Напишите программу, которая читает известное имя файла f1.txt который содержит один столбец чисел в синтаксисе Python. Ваша задача – отобразить сумму этих чисел, что является 10485.14 Для данного примера.

  • Прочитайте документацию для glob.glob () И напишите программу для перечисления всех файлов, заканчивающихся с .текст В текущем каталоге, а также подпассы, рекурсивно.

100 страница Python Intro (20 частей серии)

Оригинал: “https://dev.to/learnbyexample/dealing-with-files-in-python-7lf”