Программирование ввода-вывода для изучения Python

искусственный интеллект Python JSON Операционная система

Учебный каталог Python

  1. Использование Python3 под Mac
  2. Типы данных для изучения Python
  3. Функция обучения Python
  4. Расширенные возможности обучения Python
  5. Функциональное программирование для изучения Python
  6. Модуль обучения Python
  7. Объектно-ориентированное программирование для изучения Python
  8. Расширенное объектно-ориентированное программирование для изучения Python
  9. Отладка ошибок и тестирование обучения Python
  10. Программирование ввода-вывода для изучения Python
  11. Процесс обучения Python и поток
  12. Регулярность изучения Python
  13. Общие модули для изучения Python
  14. Python обучение сетевому программированию

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

IO编程

файл читать и писать

Над кодом:

try:
    //读文件
    f = open('/path/to/file', 'r')
    print(f.read())
    //写文件
    f = open('/Users/michael/test.txt', 'w')
    f.write('Hello, world!')
finally:
    if f:
        //关闭文件
        f.close()

Эквивалентно:

//读文件
with open('/path/to/file', 'r') as f:
    print(f.read())
//写文件
with open('/Users/michael/test.txt', 'w') as f:
    f.write('Hello, world!')

открыть файл

Открыть текстовый файл

1. Откройте файл в режиме чтения

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

>>> f = open('/Users/michael/test.txt', 'r')

Идентификатор 'r' означает чтение, значит, мы успешно открыли файл.

2. Откройте файл в режиме записи

>>> f = open('/Users/michael/test.txt', 'w')

3. Откройте файл с кодировкой (чтение или запись)

Метод кодировки по умолчанию для чтения и записи файлов — UTF-8.Чтобы прочитать текстовые файлы, не закодированные в UTF-8, вам нужно указатьopen()функция передана вencodingПараметры, например, для чтения файлов в кодировке GBK:

>>> f = open('/Users/michael/gbk.txt', 'r', encoding='gbk')

Откройте бинарный файл

Для чтения двоичных файлов, таких как изображения, видео и т. д., используйте'rb'Откройте файл в режиме:

>>> f = open('/Users/michael/test.jpg', 'rb')

прочитать файл

Если файл успешно открыт, затем вызовитеread()Метод может прочитать все содержимое файла за один раз, Python считывает содержимое в память, используяstrПредставление объекта:

>>> f.read()

перечислитьread()Он будет читать все содержимое файла за один раз.Если файл имеет 10G, память взорвется.Поэтому, чтобы быть в безопасности, вы можете вызывать его несколько раз.read(size)метод, который считывает не более байтов размера за раз. Кроме того, звонитеreadline()Чтобы читать по одной строке за раз, вызовитеreadlines()Читать все сразу и возвращать построчноlist. Поэтому необходимо решить, как звонить в соответствии с потребностями.

Если файл маленький,read()Одноразовое чтение наиболее удобно, если невозможно определить размер файла, вызовите его повторноread(size)Сравните страхование; если это файл конфигурации, вызовитеreadlines()Наиболее удобно:

for line in f.readlines():
    print(line.strip()) # 把末尾的'\n'删掉

file-like Object

рисунокopen()Эта функция возвращаетread()Объект метода, в совокупности именуемый файлоподобным объектом в Python. Помимо файла, это также может быть поток байтов памяти, сетевой поток, пользовательский поток и т. д. файлоподобный объект не требует наследования от определенного класса, достаточно написатьread()метод подойдет.

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

записать файл

Запись файла аналогична чтению файла, разница только в вызовеopen()При вызове функции передать идентификатор'w'или'wb'Указывает на запись текстового файла или запись двоичного файла:

f.write('Hello, world!')

закрыть файл

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

>>> f.close()

StringIO и BytesIO

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

StringIO

StringIO, как следует из названия, читает и записывает str в память.

Чтобы записать str в StringIO, нам нужно сначала создать StringIO, а затем записать его как файл:

>>> from io import StringIO
>>> f = StringIO()
>>> f.write('hello')
5
>>> f.write(' ')
1
>>> f.write('world!')
6
>>> print(f.getvalue())
hello world!

getvalue()метод используется для получения написанного str.

Чтобы прочитать StringIO, инициализируйте StringIO с помощью str, а затем прочитайте его как файл:

>>> from io import StringIO
>>> f = StringIO('Hello!\nHi!\nGoodbye!')
>>> while True:
...     s = f.readline()
...     if s == '':
...         break
...     print(s.strip())
...
Hello!
Hi!
Goodbye!

BytesIO

StringIO может работать только с str.Если вы хотите работать с двоичными данными, вам нужно использовать BytesIO.

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

>>> from io import BytesIO
>>> f = BytesIO()
>>> f.write('中文'.encode('utf-8'))
6
>>> print(f.getvalue())
b'\xe4\xb8\xad\xe6\x96\x87'

Обратите внимание, что записываются не str, а байты в кодировке UTF-8.

Подобно StringIO, BytesIO можно инициализировать с помощью байтов, а затем читать как файл:

>>> from io import BytesIO
>>> f = BytesIO(b'\xe4\xb8\xad\xe6\x96\x87')
>>> f.read()
b'\xe4\xb8\xad\xe6\x96\x87'

Работа с файлами и каталогами

Если мы хотим работать с файлами и каталогами, мы можем вводить различные команды, предоставляемые операционной системой, в командной строке для завершения. Напримерdir,cpи так далее.

Что делать, если вы хотите выполнять операции с этими каталогами и файлами в программе Python? На самом деле команды, предоставляемые операционной системой, просто вызывают интерфейсные функции, предоставляемые операционной системой.osМодули также могут напрямую вызывать интерфейсные функции, предоставляемые операционной системой.

Некоторые функции для работы с файлами и каталогами размещены вosмодуль, часть которого размещена вos.pathв модуле.

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

>>> [x for x in os.listdir('.') if os.path.isdir(x)]
['.lein', '.local', '.m2', '.npm', '.ssh', '.Trash', '.vim', 'Applications', 'Desktop', ...]

перечислить все.pyфайл и только одна строка кода:

>>> [x for x in os.listdir('.') if os.path.isfile(x) and os.path.splitext(x)[1]=='.py']
['apis.py', 'config.py', 'models.py', 'pymonitor.py', 'test_db.py', 'urls.py', 'wsgiapp.py']

Сериализация

pickle

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

После сериализации сериализованный контент можно записать на диск или передать на другие машины по сети.

И наоборот, повторное чтение содержимого переменных из сериализованного объекта в память называется десериализацией или распаковкой.

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

JSON

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

Встроенный PythonjsonМодуль обеспечивает очень сложное преобразование объектов Python в формат JSON. Давайте сначала посмотрим, как превратить объект Python в JSON:

>>> import json
>>> d = dict(name='Bob', age=20, score=88)
>>> json.dumps(d)
'{"age": 20, "score": 88, "name": "Bob"}'

dumps()метод возвращаетstr, содержимое стандартное JSON. сродни,dump()метод может напрямую записывать JSON вfile-like Object.

Чтобы десериализовать JSON в объект Python, используйтеloads()или соответствующийload()метод, первый десериализует строку JSON, второй изfile-like ObjectПрочитайте строку и десериализуйте ее в:

>>> json_str = '{"age": 20, "score": 88, "name": "Bob"}'
>>> json.loads(json_str)
{'age': 20, 'score': 88, 'name': 'Bob'}

Поскольку стандарт JSON указывает, что кодировка JSON — UTF-8, мы всегда можемstrПреобразование в строки JSON и из них.

Далее: Процесс обучения Python и поток