639 Stimmen

Wie benutzt man StringIO in Python3?

Ich verwende Python 3.2.1 und ich kann nicht importieren die StringIO Modul. Ich verwende io.StringIO und es funktioniert, aber ich kann es nicht verwenden mit numpy 's genfromtxt wie diese:

x="1 3\n 4.5 8"        
numpy.genfromtxt(io.StringIO(x))

Ich erhalte den folgenden Fehler:

TypeError: Can't convert 'bytes' object to str implicitly  

und wenn ich schreibe import StringIO heißt es

ImportError: No module named 'StringIO'

24voto

Tiago Coutinho Punkte 1550

Sie können die StringIO de la sechs Modul:

import six
import numpy

x = "1 3\n 4.5 8"
numpy.genfromtxt(six.StringIO(x))

7voto

Pierre ALBARÈDE Punkte 374

Um Beispiele aus aquí mit Python 3.5.2 funktionieren, können Sie wie folgt umschreiben:

import io
data =io.BytesIO(b"1, 2, 3\n4, 5, 6") 
import numpy
numpy.genfromtxt(data, delimiter=",")

Der Grund für die Änderung kann darin liegen, dass der Inhalt einer Datei aus Daten (Bytes) besteht, die erst dann zu Text werden, wenn sie irgendwie dekodiert werden. genfrombytes ist vielleicht ein besserer Name als genfromtxt .

2voto

Trees Punkte 940

Hier ein weiteres Beispiel für Python 3 . Es werden zwei Funktionen verwendet, um zwei Zahlen zu addieren und dann CProfile zu verwenden, um das Ergebnis zu speichern. .prof Datei. Dann lädt es die Speicherdatei mit pstats.Stats und ```StringIO`` zur Umwandlung der Daten in eine Zeichenkette zur weiteren Verwendung.

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())

Verwendung:

python3 main.py

Ausgabe:

================ 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}

Kommentare: Wir können feststellen, dass die Funktion time.sleep im obigen Code etwa 2,507 Sekunden benötigt.

-1voto

SM Mustafa Punkte 9

Ich hoffe, dies entspricht Ihren Anforderungen

import PyPDF4
import io

pdfFile = open(r'test.pdf', 'rb')
pdfReader = PyPDF4.PdfFileReader(pdfFile)
pageObj = pdfReader.getPage(1)
pagetext = pageObj.extractText()

for line in io.StringIO(pagetext):
    print(line)

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X