Как использовать StringIO в Python 3 с numpy.genfromtxt()?
Я использую Python 3.2.1, и у меня возникла проблема с импортом модуля StringIO
. Я использую io.StringIO
, и это работает, но я не могу использовать его с функцией genfromtxt()
из библиотеки numpy
следующим образом:
x = "1 3\n 4.5 8"
numpy.genfromtxt(io.StringIO(x))
В результате я получаю следующую ошибку:
TypeError: Can't convert 'bytes' object to str implicitly
Когда я пытаюсь выполнить import StringIO
, появляется сообщение об ошибке:
ImportError: No module named 'StringIO'
Как я могу решить эту проблему?
3 ответ(ов)
В вашем случае вы можете использовать следующий импорт:
from io import StringIO
StringIO
позволяет вам создать объект, который будет вести себя как файл, но будет работать с строками в памяти, что может быть полезно для обработки текстовых данных. Если у вас есть другие вопросы относительно использования StringIO
, пожалуйста, уточните!
В Python 3 функция numpy.genfromtxt
ожидает байтовый поток. Вы можете использовать следующий код:
import io
import numpy as np
data = "ваши данные здесь" # замените на ваши данные
array = np.genfromtxt(io.BytesIO(data.encode()))
Таким образом, с помощью io.BytesIO
вы сможете преобразовать строку в байтовый поток, который правильно воспринимается numpy.genfromtxt
.
Вот еще один пример для Python 3. Он использует две функции для сложения двух чисел, а затем использует CProfile для сохранения файла с расширением .prof
. После этого файл загружается с использованием pstats.Stats
и StringIO
, чтобы преобразовать данные в строку для дальнейшего использования.
main.py
import cProfile
import time
import pstats
from io import StringIO
def add_slow(a, b):
time.sleep(0.5)
return a + b
def add_fast(a, b):
return a + b
prof = cProfile.Profile()
def main_func():
arr = []
prof.enable()
for i in range(10):
if i % 2 == 0:
arr.append(add_slow(i, i))
else:
arr.append(add_fast(i, i))
prof.disable()
# prof.print_stats(sort='time')
prof.dump_stats("main_funcs.prof")
return arr
main_func()
stream = StringIO()
stats = pstats.Stats("main_funcs.prof", stream=stream)
stats.print_stats()
stream.seek(0)
print(16 * '=', "RESULTS", 16 * '=')
print(stream.read())
Использование:
python3 main.py
Вывод:
================ RESULTS ================
Tue Jul 6 17:36:21 2021 main_funcs.prof
26 function calls in 2.507 seconds
Random listing order was used
ncalls tottime percall cumtime percall filename:lineno(function)
10 0.000 0.000 0.000 0.000 {method 'append' of 'list' objects}
5 2.507 0.501 2.507 0.501 {built-in method time.sleep}
5 0.000 0.000 2.507 0.501 profiler.py:39(add_slow)
5 0.000 0.000 0.000 0.000 profiler.py:43(add_fast)
1 0.000 0.000 0.000 0.000 {method 'disable' of '_lsprof.Profiler' objects}
Комментарии: Мы можем наблюдать, что в приведенном выше коде функция time.sleep
занимает примерно 2.507 секунды.
Как вернуть ключи словаря в виде списка в Python?
UnicodeDecodeError: Кодек 'charmap' не может декодировать байт X в позиции Y: символ отображается как <неопределённый>
Что такое __pycache__?
Относительные импорты в Python 3
Ошибка: "'dict' объект не имеет метода 'iteritems'"