На этом шаге мы закончим рассмотрение методов этого класса.
Продолжим перечисление методов класса StringIO. На этом шаге перечислены, в основном, методы, реализующие чтение из "файла".
>>> f = io.StringIO("String1\nString2\n") >>> f.read() 'String1\nString2\n' >>> f.seek(0) # Перемещаем указатель в начало "файла" 0 >>> f.read(5), f.read(5), f.read(5), f.read(5), f.read(5) ('Strin', 'g1\nSt', 'ring2', '\n', '') >>> f.close() # Закрываем "файл"
>>> f = io.StringIO("String1\nString2") >>> f.readline(), f.readline(), f.readline() ('String1\n', 'String2', '') >>> f.close() # Закрываем "файл"
Если в необязательном параметре указано число, то считывание будет выполняться до тех пор, пока не встретится символ новой строки (\n), символ конца "файла" или из "файла" не будет прочитано указанное количество символов. Иными словами, если количество символов в строке меньше значения параметра, то будет считана одна строка, а не указанное количество символов. Если количество символов в строке больше, то возвращается указанное количество символов. Пример:
>>> f = io.StringIO("String1\nString2\nString3\n") >>> f.readline (5), f.readline (5) ('Strin', 'g1\n') >>> f.readline (100) # Возвращается одна строка, а не 100 символов 'String2\n' >>> f.close() # Закрываем "файл"
>>> f = io.StringIO("String1\nString2\nString3") >>> f.readlines () ['String1\n', 'String2\n', 'String3'] >>> f. close () # Закрываем "файл"
Если в необязательном параметре указано число, то считывается указанное количество символов плюс фрагмент до символа конца строки \n. Затем эта строка разбивается и добавляется построчно в список. Пример:
>>> f = io.StringIO("String1\nString2\nString3") >>> f.readlines (14) ['String1\n', 'String2\n'] >>> f.seek(0) # Перемещаем указатель в начало "файла" 0 >>> f.readlines (17) ['String1\n', 'String2\n', 'String3'] >>> f.close () # Закрываем "файл"
>>> f = io.StringIO("String1\nString2") >>> f.__next__(), f.__next__() ('String1\n', 'String2') >>> f.__next__() Traceback (most recent call last): File "<pyshell#74>", line 1, in <module> f.__next__() StopIteration >>> f.close () # Закрываем "файл"
Благодаря методу __next__() мы можем перебирать файл построчно с помощью цикла for. Цикл for на каждой итерации будет автоматически вызывать метод __next__(). Пример:
>>> f = io.StringIO("String1\nString2") >>> for line in f: print (line.rstrip()) String1 String2 >>> f.close () # Закрываем "файл"
>>> f = io.StringIO("String1\nString2\nString3") >>> f.truncate (15) # Обрезаем "файл" 15 >>> f.getvalue () # Получаем содержимое "файла" 'String1\nString2' >>> f.close () # Закрываем "файл"
Если параметр не указан, то "файл" обрезается до текущей позиции указателя:
>>> f = io.StringIO("String1\nString2\nString3") >>> f.seek (15) # Перемещаем указатель 15 >>> f.truncate () # Обрезаем "файл" до указателя 15 >>> f.getvalue () # Получаем содержимое "файла" 'String1\nString2' >>> f.close () # Закрываем "файл"
Описанные ранее методы writable() (161 шаг) и seekable() (162 шаг), вызванные у объекта класса StringIO, всегда возвращают True.
На следующем шаге мы рассмотрим класс BytesIO.