Χρησιμοποιώ την 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'
όταν γράφω import StringIO λέει ότι δεν υπάρχει τέτοια ενότητα.
Από το What's New In Python 3.0:
Τα modules
StringIO
καιcStringIO
έχουν εξαφανιστεί. Αντ' αυτού, εισάγετε τοio
ενότητα και χρησιμοποιήστε τηνio.StringIO
ή τηνio.BytesIO
για κείμενο και δεδομένα αντίστοιχα.
.
Μια πιθανώς χρήσιμη μέθοδος επιδιόρθωσης κάποιου κώδικα Python 2 ώστε να λειτουργεί και στην Python 3 (caveat emptor):
try:
from StringIO import StringIO ## for Python 2
except ImportError:
from io import StringIO ## for Python 3
Σημείωση: Αυτό το παράδειγμα μπορεί να είναι εφαπτόμενο του κύριου θέματος της ερώτησης και περιλαμβάνεται μόνο ως κάτι που μπορεί να ληφθεί υπόψη όταν αντιμετωπίζεται γενικά η ελλείπουσα ενότητα
StringIO
. Για μια πιο άμεση λύση το μήνυμαTypeError: σε str implicitly
, δείτε αυτή την απάντηση.
Στην περίπτωσή μου χρησιμοποίησα:
from io import StringIO
Στην Python 3 το numpy.genfromtxt
αναμένει μια ροή bytes. Χρησιμοποιήστε τα ακόλουθα:
numpy.genfromtxt(io.BytesIO(x.encode()))