Всякий раз, когда я работаю над проектом Python, мне приходится взаимодействовать с файлами в моей системе. Я использую файловые методы Python для выполнения определенных операций с файлом, таких как чтение, запись, усечение и т. д.
Python имеет различные файловые методы для работы с файлами в вашей системе, такие как чтение, запись, открытие и т. д. Эти методы позволяют выполнять широкий спектр операций с файлами.
- Метод Open()
- Метод Read()
- Методы Write()
- Метод Writelines()
- Метод Readlines()
- Метод Seek()
- Метод Flush()
- Метод Close()
Метод Open()
Файловый метод open() используется для открытия файла в определенном режиме, например, вы можете открыть файл в режиме чтения(r), записи(w) и добавления(a).
Прежде чем выполнять какую-либо операцию с файлом, необходимо открыть его в одном из трех режимов (r, w, a), в зависимости от того, что вы хотите с ним сделать.
Синтаксис:
file = open("filename", 'mode')
Где:
- open(): это файловый метод, используемый для открытия файла; он принимает два параметра: имя файла и режим.
- filename: это имя файла, который вы хотите открыть, включая полный путь к файлу в вашей системе.
- mode: Режим означает, хотите ли вы открыть файл для чтения, записи или добавления к нему чего-либо. Таким образом, вы можете указать три режима: «r» для чтения, «w» для записи и «a» для добавления.
Помните: когда вы открываете файл в любом из трех режимов с помощью функции open(), создается файловый объект. Вы можете использовать этот файловый объект для вызова другого файлового метода для определенных операций.
Например, на компьютере есть файл data.txt. Вы можете использовать метод open(), чтобы открыть этот файл, как показано в коде ниже.
file = open("/content/data.txt",'r') print(file)
Когда вы выполняете приведенный выше код, он берет ваш файл data.txt по указанному пути и открывает его в режиме чтения, поскольку здесь используется режим «r», и возвращает объект файла, который вы можете видеть на рисунке ниже.
Когда вы печатаете объект файла, он показывает » означает, что файл открыт в режиме чтения.
Метод Read()
Метод read() позволяет прочитать содержимое открытого файла. Вызовите этот метод для файлового объекта, чтобы прочитать содержимое файла.
Синтаксис:
file_object.read(bytes_to_read)
Где:
- file_object: объект файла, возвращаемый функцией open().
- read (bytes_to_read): функция read() считывает содержимое файла и принимает аргумент опции, называемый bytes_to_read, что означает несколько байтов для чтения из файла. Если этот аргумент не указан, по умолчанию считывается все содержимое файла.
Например, я открою тот же файл data.txt, используя метод open().
file = open("/content/data.txt",'r')
Приведенный выше код открыл файл в режиме чтения и вернул объект файла, на который можно ссылаться по имени «файл».
Чтобы прочитать содержимое файла, вызовите метод read() объекта файла, как показано в коде ниже.
print(file.read())
Посмотрите при вызове метода file.read() для файлового объекта. Он возвращает содержимое файла: «Вы изучаете файловые методы Python».
На данный момент файл data.txt содержит одну строку предложения, поэтому он возвращает все предложение. Предположим, вы хотите прочитать только 10 байт файла. вы можете указать это в функции read(), как показано в коде ниже.
print(file.read(10))
Посмотрите на результат. Указание 10 байт в методе read() возвращает символ из файла, то есть «Вы находитесь».
Теперь, если да, вызовите функцию read() с 5 байтами, затем он считывает содержимое из последних прочитанных байтов, но не читает содержимое с начала.
Методы Write()
Метод write() Python записывает текст (или байты) в текстовый файл. Чтобы использовать этот метод, вызовите его для файлового объекта со строкой или данными, которые вы хотите записать.
Синтаксис:
file_object.write(bytes_to_write)
Где:
- file_object: объект файла, возвращаемый функцией open().
- write (bytes_to_write): функция write() записывает содержимое в файл и принимает аргумент опции, называемый bytes_to_write, что означает количество байтов для записи в файл.
Например, предположим, что вам необходимо записать ежедневное задание в файл Task.txt на вашем компьютере. Сначала откройте файл в режиме добавления, используя приведенный ниже код.
file = open("/content/task.txt",'a')
Помните: если файл не существует по указанному пути, он создает новый файл с таким именем (task.txt) и возвращает файловый объект. Файл «task.txt» на моем компьютере не существует по пути «/content/», поэтому приведенное выше создает новый файл.
После открытия файла в режиме добавления («a») вызовите для него метод write() со строкой (байтами), которую вы хотите записать в него. Посмотрите и выполните для этого код ниже.
file.write("Get up at 4 A.M ")
Строка «Вставать в 4 утра» записывается в файл Task.txt с использованием приведенного выше кода. Когда вы выполняете приведенный выше код, он возвращает целое число, обозначающее количество байтов, записанных в файл.
После этого ваши данные еще не записываются в файл, он находится в так называемом буфере, что означает, что после вызова метода write() для файлового объекта ваши данные или строка не появятся в вашем файле.
Чтобы отобразить записанные в него данные или строку, необходимо закрыть объект файла, вызвав метод close(), как показано в коде ниже.
file.close()
После выполнения приведенного выше кода ваши данные станут видимыми в файле Task.txt.
Давайте прочитаем файл. Для этого откройте файл Task.txt в режиме чтения и вызовите метод read(), чтобы прочитать все его содержимое, как показано в коде ниже.
file = open("/content/task.txt",'r') file.read()
Навсегда закройте открытый файл, когда вам больше не нужно выполнять какие-либо операции с файлом.
file.close()
Посмотрите на результат: это именно та строка, которую вы написали с помощью метода write(). Вот как вы можете использовать метод write() файлового объекта для записи байтов данных в файл.
Метод Writelines()
Метод Python writelines() записывает в файл несколько строк строки за один раз. Функция writelines() может записать в файл последовательность или список строк. Он также может записать одну строку.
Синтаксис:
file_object.writelines(list_of_strings)
Где:
- file_object: объект файла, возвращаемый функцией open().
- writelines(list_of_strings): функция writelines() записывает последовательность строк в файл и принимает аргумент опции list_of_strings, который содержит несколько строк строк для записи в файл: это может быть итерируемый объект, такой как кортеж или список.
Например, предположим, что у вас есть список строк, как показано ниже.
tasks = ["Go for walk\n", "Do the breakfast\n", "Get ready for the office\n"]
Как видите, список задач содержит несколько задач в виде строк. Чтобы записать каждую строку в файл одновременно, используйте функцию writelines(), выполнив следующие шаги:
Откройте тот же файл «task.txt» в приложении, указав «a» в качестве режима в методе open(), как показано в коде ниже.
file = open("/content/task.txt", "a")
После открытия файла вызовите метод writelines() со списком задач, которые вы хотите записать в него, как показано в коде ниже.
file.writelines(tasks)
После этого файл закрывается с помощью приведенного ниже кода.
file.close()
Метод Readlines()
Метод readlines() аналогичен методу read(), но он возвращает каждую строку файла в виде списка строк.
Предположим, у вас есть текстовый файл, содержащий четыре строки строк, этот метод возвращает список строк, каждая из которых представляет строку файла.
Синтаксис:
file_object.readlines(bytes_to_read)
Где:
- file_object: объект файла, возвращаемый функцией open().
- readlines (bytes_to_read): функция readlines() считывает содержимое файла построчно, возвращает список строк и принимает аргумент опции, называемый bytes_to_read, что означает несколько байтов для чтения из файла. Если этот аргумент не указан, по умолчанию считывается все содержимое файла.
Например, прочитайте файл Task.txt, который вы создали в предыдущем разделе. Откройте файл в режиме чтения, используя приведенный ниже код.
file = open("/content/task.txt", "r")
Теперь вызовите метод readlines() для файла, как показано в коде ниже.
file.readlines()
Теперь закройте файл.
file.close()
Посмотрите на результат: метод readlines() возвращает содержимое файла в виде списка строк или строк, таких как ‘[‘Иди гулять\n’, ‘Сделай завтрак\n’, ‘Готовься в офис\n’]’.
Метод Seek()
Вы открыли файл для чтения и записи или для выполнения операций ввода/вывода. Но задумывались ли вы когда-нибудь, как файловые методы Python узнают, куда записывать и читать файл?
Я имею в виду, как решается, что такие методы, как read(), write() и т. д., начнут записывать или читать файл из определенного места, и как определяется это место? Именно здесь появляется концепция указателя файла.
Указатель файла — это индикатор или контрольная точка, используемая для указания текущей позиции в файле. Другими словами, он отслеживает место в файле, из которого будет выполнена следующая операция чтения или записи.
Таким образом, когда вы открываете файл с помощью метода open() в режиме чтения или записи, с этим файлом связывается указатель файла для чтения или записи. Этот указатель файла указывает на начало файла в целом, что означает, что следующая операция чтения или записи будет выполняться с начала файла.
Таким образом, когда данные, например строка, записываются или считываются из файла, указатель файла автоматически обновляется, отражая его текущую позицию в файле.
Теперь вы понимаете, что такое указатели файлов. Предположим, вы хотите изменить положение или расположение этого указателя файла внутри файла на другое положение или местоположение.
Метод Seek() позволяет вам установить позицию указателя файла или текущую позицию указателя файла на другую позицию в файле, из которой будет выполняться следующая операция чтения или записи.
Синтаксис:
file_object.seek(offset, whence)
Где:
- file_object: объект файла, возвращаемый функцией open().
- offset: представляет количество байтов для перемещения указателя файла внутри файла. Когда вы указываете отрицательное смещение, указатель файла перемещается назад, но при положительном смещении указатель файла перемещается вперед.
- whence: определяет, откуда или в каком направлении должен двигаться указатель файла, например вперед или назад. Следующие три значения могут определить это:
- Когда для параметра «where» установлено значение 0, это означает перемещение указателя файла на указанное количество байтов от начала файла.
- Когда для параметра «where» установлено значение 1, это означает перемещение указателя файла на указанное количество байтов от текущей позиции указателя файла внутри файла.
- Когда для параметра «where» установлено значение 2, это означает перемещение указателя файла на указанное количество байтов от конца файла.
Но прежде чем мы перейдем к практическому примеру метода Seek(), я хочу, чтобы вы представили еще один метод: Tell(). Этот метод возвращает текущую позицию указателя файла внутри файла.
Синтаксис метода Tell() приведен ниже.
file_object.tell()
Вызовите метод Tell() файлового объекта, чтобы узнать положение указателя файла внутри файла.
Итак, с этого момента используйте метод Seek(), чтобы установить текущую позицию указателя файла внутри файла, и метод Tell(), чтобы узнать текущую позицию указателя файла внутри файла.
Например, откройте файл data.txt в режиме записи с помощью метода open(), как показано в коде ниже.
file = open("/content/data.txt", "w")
Приведенный выше код создает и открывает пустой файл по пути «/content/» в вашем директоре.
Давайте проверим положение указателя файла записи во вновь созданном файле data.txt с помощью метода Tell(), как показано в коде ниже.
file.tell()
Посмотрите на результат, метод Tell() возвращает текущую позицию указателя файла записи как 0, что означает, что указатель записи указывает на начало, поскольку файл пуст.
Давайте запишем в него некоторый контент, используя метод write(), как показано в коде ниже.
file.write("Python")
Когда вы выполняете приведенный выше код, он записывает слово «Python» в файл «data.txt». Как видите, слово состоит из 6 символов, и каждый символ представлен одним байтом пробела.
Таким образом, текущая позиция указателя файла записи внутри файла должна находиться на уровне 6-го байта. Давайте проверим это, снова вызвав метод Tell() для файлового объекта, как показано в коде ниже.
file.tell()
Посмотрите на результат. На этот раз метод Tell() возвращает текущую позицию указателя файла записи как 6.
Теперь переместите текущую позицию указателя записи файла на 20 байт вперед от начала файла с помощью метода Seek(), как показано в коде ниже.
file.seek(20)
Проверьте текущую позицию с помощью метода Tell(), как показано в коде ниже.
file.tell()
Посмотрите на результат. Метод search(20) перемещает указатель файла записи на 20-й байт или индексную позицию от начала файла. Чтобы убедиться в этом, метод Tell() возвращает текущую позицию указателя файла записи как 20.
Но помните, что когда вы открываете файл в режимах «r», «w» и «a», значения параметров 1 и 2 не работают, работает только значение 0. Например, перемещение указателя файла на 20 байт назад от текущей позиции с помощью приведенного ниже кода приведет к ошибке.
file.seek(-20, 1)
Приведенный выше код возвращает ошибку, если в методе search(-20, 1) для значения where установлено значение 1.
Но когда вы открываете бинарный файл в режимах «rb», «wb» и «ab», параметры 1 и 2 работают.
Например, откройте новый двоичный файл с именем «binary.txt» в режиме добавления, указав режим «ab», что означает «добавление двоичного файла».
file = open("/content/binary.txt", "ab")
После открытия двоичного файла в режиме добавления запишите несколько байтов с помощью метода write(), как показано в коде ниже.
file.write(b"This is the binary data")
Здесь в методе write() указываются двоичные данные, то есть b «Это двоичные данные». Перед этой строкой стоит буква «b», что означает, что вся строка представляет собой байтовый литерал.
После записи байтовых данных в файл «binary.txt» проверьте текущую позицию указателя файла с помощью метода Tell().
file.tell()
Посмотрите на результат. После записи двоичных данных в файл текущая позиция указателя файла внутри файла равна 23, как вы можете видеть в выводе.
Теперь, если вы хотите переместить текущую позицию указателя файла на 10 байт в прямом направлении, используйте метод seek() и передайте смещение как 10 со значением параметра 1.
file.seek(10, 1)
После перемещения позиции указателя файла проверьте его текущую позицию в файле с помощью метода Tell().
file.tell();
Как вы можете видеть в выводе, указатель файла переместился на 10 байт вперед от своей текущей позиции, поэтому метод Tell() возвращает новую позицию как 33.
Поскольку предыдущая позиция указателя файла была 23, перемещение его на 10 байт вперед сделает его 33.
Вы также можете переместить положение указателя файла назад, указав отрицательное значение смещения. Например, переместите позицию указателя файла на 20 байт в обратном направлении от текущей позиции. Для этого посмотрите и выполните приведенный ниже код.
file.seek(-20, 1) file.tell()
Посмотрите на результат. Если указать отрицательное значение смещения как -20, указатель файла переместится на 20 байт назад от своего текущего положения. В результате метод Tell() возвращает текущую позицию указателя файла как 13.
Теперь вы знаете, как использовать метод seek() для изменения положения указателя файла внутри файла в обоих направлениях: вперед и назад.
Наконец, давайте установим для параметра «wherece» метода Seek() значение 2, чтобы переместить указатель файла в конец файла из его текущей позиции.
file.seek(0,2)
Проверьте текущее положение.
file.tell()
Когда вы выполняете приведенный выше код, он показывает текущую позицию указателя файла как 23. Если вы помните, это была позиция, когда вы впервые выполнили операцию записи в файл.
Теперь закройте файл после работы с ним.
file.close()
Метод Flush()
Во-первых, позвольте мне развить вашу концепцию метод аlush(). Всякий раз, когда вы открываете файл и выполняете операцию записи, данные не записываются непосредственно в файл. Вместо этого он записывается или сохраняется во внутреннем буфере.
Если вы помните из раздела, где вы узнали, как использовать метод write(), я показывал один пример, в котором вы записывали данные в файл с помощью метода write(), но когда вы пытаетесь прочитать эти данные с помощью метода read() метод перед закрытием файла, вы ничего в файле не увидите.
Итак, вы не видите, что поскольку ваши данные записываются в буфер, существует два способа перенести данные из буфера в файл.
Первый — вызвать метод close() для файла, чтобы автоматически перенести данные из буфера в файл, а второй — вызвать метод lush(), чтобы перенести данные из буфера в файл, не закрывая файл.
Всякий раз, когда буфер заполняется, он автоматически записывает данные в файл. Этот процесс называется промывкой. Итак, вы используете метод lush() для очистки данных из буфера.
Например, откройте новый файл с именем «data.txt» в режиме добавления, используя приведенный ниже код.
file = open("/content/data.txt", "a")
Используйте метод write() для записи данных в файл data.txt, как показано в коде ниже.
file.write("This is the classified data")
Приведенный выше код записывает данные в файл, но ваши данные находятся во внутреннем буфере; он еще не записан в файл. Чтобы убедиться в этом, откройте файл data.txt по указанному пути.
Посмотрите на картинку. Я открыл файл data.txt, но этот файл не содержит никаких записанных данных. Итак, данные сохраняются во внутреннем буфере. Чтобы очистить этот буфер, вы должны вызвать метод lush(), как показано в коде ниже.
file.flush()
После выполнения метода lush() для файлового объекта данные записываются из буфера в файл, поэтому на рисунке вы можете видеть, что имя файла «data.txt» содержит записанные данные.
Вы можете использовать метод lush() для немедленной записи данных из буфера в файл.
Метод Close()
Файловый метод Python close() закрывает открытый файл в любом режиме. Итак, файл открывается для выполнения над ним определенной операции, когда операция завершена, файл должен быть близок, чтобы понять количество системных ресурсов, используемых этим файлом.
Синтаксис:
file_object.close()
Вы должны вызвать метод close() объекта файла, чтобы закрыть этот файл.
После закрытия файла файловый объект нельзя использовать для выполнения над ним операций; если вы попытаетесь выполнить какую-либо операцию, например чтение или запись, возникнет ошибка.