Recentemente ho incontrato il metodo readinto
dell'oggetto file
(in Python 2.7), è simile a fread
in C. Sembra in alcuni casi comodo e potente. Ho intenzione di usarlo per leggere diversi file in un array numerico pre-assegnato senza dati copiati.Dovrei usare il metodo `readinto` del file python o no?
ad es.
a = np.empty(N)
b = memoryview(a)
fp1.readinto(b[0:100])
fp2.readinto(b[100:200])
e
fp1.readinto(b[0:100])
fp1.seek(400, 1)
fp1.readinto(b[100:200])
Ho usato Cython
e fread
per fare questo prima di incontrare readinto
. Quindi sono molto felice di conoscere una soluzione Python pura.
Tuttavia la sua stringa di documento dice,
file.readinto?
Type: method_descriptor
String form: <method 'readinto' of 'file' objects>
Namespace: Python builtin
Docstring: readinto() -> Undocumented. Don't use this; it may go away.
Non usare questo? Cos'è successo?
Quindi sono confuso, dovrei usare readinto
o no? Può causare problemi indesiderati?
Esiste un'implementazione alternativa per il codice precedente senza readinto
ma anche evitare la copia dei dati? (Per evitare la copia significa np.concatenate
o np.stack
non è una buona scelta.)
Qualsiasi suggerimento è il benvenuto! Grazie.
------- ------- upate
Sembra che posso usare io.FileIO
nella libreria standard anziché la funzione build-in open
. Sembra OK quindi ho pubblicato come risposta.
Qualsiasi commento o altra soluzione è ancora benvenuto!
upate ------- -------
Se si incontra lo stesso problema, si consiglia di avere uno sguardo ai commenti qui sotto per
Andrea Corbellini e Padraic Cunningham.
Potrebbe rispondere alla tua domanda http://stackoverflow.com/questions/9791780/readinto-replacement –
@AndreaCorbellini Basta digitare 'file.readinto?' In IPython , questo è equivalente a 'help (file.readinto)' nella shell python standard. Ho controllato altri metodi 'file' come hai detto tu, ma solo' readinto' mostra questo messaggio. –
Vuoi forse memmap? Http: //docs.scipy.org/doc/numpy-1.10.0/reference/generated/numpy.memmap.html –