Статьи

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

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

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

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

Чтобы открыть файл с помощью Python, мы будем использовать функцию open () . Как указано в документации:

open () возвращает объект файла и чаще всего используется с двумя аргументами: open (имя файла, режим)

Перед приведением примера, как упоминалось выше, функция open() будет принимать два аргумента: имя файла и режим . Этот способ установки аргументов на самом деле похож на stdio ‘s (т.е. C) fopen() . Filename — это просто имя файла, который вы хотите открыть. Вы также можете указать путь к этому файлу, если его нет в вашем текущем каталоге. И режим — это строковое значение, которое указывает, как файл будет открыт. Примеры различных режимов показаны в следующей таблице:

Режим Описание
р Открыть текстовый файл для чтения. Поток располагается в начале файла
г + Открыто для чтения и письма. Поток располагается в начале файла
вес Обрезать до нулевой длины или создать текстовый файл для записи. Поток располагается в начале файла
W + Открыто для чтения и письма. Файл создается, если он не существует, в противном случае он усекается. Поток располагается в начале файла
Открыто для записи. Файл создается, если он не существует. Поток располагается в конце файла. Последующие записи в файл всегда будут заканчиваться текущим концом файла
а + Открыто для чтения и письма. Файл создается, если он не существует. Поток располагается в конце файла. Последующие записи в файл всегда будут заканчиваться текущим концом файла

Вы также можете увидеть другие режимы в документации по Python .

Давайте продолжим и откроем файл Text.txt . Это можно сделать в одну строку следующим образом:

text_file = open('Text.txt')

Как вы можете видеть здесь, мы не указали mode . Чтобы узнать режим по умолчанию, используемый с open() , напечатайте print text_file , и в этом случае вы получите следующее:

<open file 'Text.txt', mode 'r' at 0x10728c810>

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

Файл похож на секретный ящик. Мы открыли его на предыдущем шаге, и теперь мы хотим посмотреть, что внутри. Чтение файла является простым в Python и может быть достигнуто с помощью метода read() следующим образом:

text_file.read()

Чтобы увидеть вывод предыдущего оператора, введите print text_file.read() . В этом случае секрет (контент) будет раскрыт!

I'm enjoying learning about "file handling" in Python

Продолжайте, и напечатайте print text_file.read() снова, и что вы заметили? Вы можете видеть, что была выведена пустая строка. Это потому, что вы уже прочитали весь файл, в отличие от чтения по одной строке за раз, т.е. readline() .

Может быть, вы хотите добавить (написать) другое предложение или абзац в файл, который мы уже прочитали. Скажем, вы хотели добавить следующее предложение: and I'm looking for more . Это можно сделать в Python с помощью метода write() следующим образом:

text_file.write('and I\'m looking for more')

К сожалению, мы получили ошибку здесь:

1
2
3
4
Traceback (most recent call last):
  File «test.py», line 2, in <module>
    text_file.write(‘ and I\’m looking for more’)
IOError: File not open for writing

Вы уже поняли смысл? Помните, когда мы открывали файл в первом разделе следующим образом: open('Text.txt') ? Поскольку мы не указали mode в этом примере, режим (по умолчанию) был установлен на r . Это позволит нам только читать файл, и в этом примере мы пытаемся записать в файл. Итак, давайте снова откроем файл, но в режиме записи w :

text_file = open('Text.txt', 'w')

Попробуйте сейчас написать предложение снова, используя код выше. Что ты получил? Давайте open() и print read() файл, как показано в первых двух разделах, чтобы увидеть, что находится внутри файла:

1
2
text_file = open(‘Text.txt’,’r’)
print text_file.read()

Результат этого сценария:

and I'm looking for more

Вы ожидали увидеть это новое предложение вместе с оригинальным предложением, которое I'm enjoying learning about "file handling" in Python , не так ли? Так куда это исчезло? Кажется, режим w перезаписывает содержимое файла, в который он записывает. Если вы заинтересованы в сохранении оригинального текста документа, вы можете использовать a (добавить):

1
2
text_file = open(‘Text.txt’,’a’)
text_file.write(‘ and I\’m looking for more’)

В этом случае вы должны получить ожидаемый контент в Text.txt :

I'm enjoying learning about "file handling" in Python and I'm looking for more

Давайте соединим все, что мы узнали до сих пор:

1
2
3
4
5
6
7
with open(‘Text.txt’, ‘r+’) as text_file:
   print ‘The file content BEFORE writing content:’
   print text_file.read()
   text_file.write(‘ and I\’m looking for more’)
   print ‘The file content AFTER writing content:’
   text_file.seek(0)
   print text_file.read()

У нас есть кое-что новое. Позвольте мне уточнить их быстро. with...as позволяет нам открыть файл, обработать его и убедиться, что он закрыт. seek() , с другой стороны, позволяет нам перемещать указатель (то есть курсор) на какую-то другую часть файла. Например, seek(0) означает, что контрольная точка будет началом файла.

Идите вперед и запустите скрипт, и посмотрите, что вы получите в качестве вывода.

Привычка закрывать файл после чтения или записи позволит вам освободить память. Да, Python автоматически закроет файлы после завершения сценария, но если вы не сделаете это заранее, любые открытые файлы будут занимать некоторое пространство, из которого Python может извлечь пользу. Закрытие файла просто выполняется с помощью метода close() .

Давайте возьмем этот пример:

1
2
3
text_file = open(‘Text.txt’,’a+’)
print text_file.read()
text_file.write(‘ and I\’m looking for more’)

Что произойдет, если мы закроем файл после read() ? То есть text_file.close() . Python выдаст следующее исключение:

1
2
3
4
Traceback (most recent call last):
  File «test.py», line 4, in <module>
    text_file.write(‘ and I\’m looking for more’)
ValueError: I/O operation on closed file

Таким образом, мы заключаем, что мы не можем читать или записывать в закрытый файл.

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

Какие другие операции вы обычно выполняете над файлами с помощью Python?