2016-01-13 15 views
5

Niedawno poznałem obiekt readinto obiektu file (w Pythonie 2.7), jest on podobny do fread w C. Wydaje się, że w niektórych przypadkach jest wygodny i potężny. Mam zamiar użyć go do odczytu kilku plików w jeden wstępnie przydzielony numpy array bez danych skopiowanych.Czy powinienem używać metody `readinto` z pliku Pythona, czy nie?

np.

a = np.empty(N) 
b = memoryview(a) 
fp1.readinto(b[0:100]) 
fp2.readinto(b[100:200]) 

i

fp1.readinto(b[0:100]) 
fp1.seek(400, 1) 
fp1.readinto(b[100:200]) 

Użyłem Cython i fread to zrobić, zanim poznałem readinto. Tak więc jestem bardzo szczęśliwy, gdy poznałem czysty system Pythona.

jednak twierdzi, że jej ciąg dokument,

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. 

Nie używaj tego? Co się stało?

Więc jestem zdezorientowany, czy powinienem użyć readinto czy nie? Może to powodować niechciany problem?

Czy jest jakaś alternatywna implementacja dla powyższego kodu bez readinto, ale także unikaj kopiowania danych? (Aby uniknąć kopiowania, oznacza to, że np.concatenate lub np.stack nie jest dobrym wyborem.)

Wszelkie sugestie są mile widziane! Dziękuję Ci.

------- upate -------

Wydaje się, że mogę używać io.FileIO w bibliotece standardowej zamiast budować w funkcji open. Wygląda OK, więc zamieściłem to jako odpowiedź.

Każdy komentarz lub inne rozwiązanie jest nadal mile widziane!

------- upate -------

Jeśli spełniasz ten sam problem, może warto spojrzeć na poniższych uwag przez
Andrea Corbellini i Padraic Cunningham.

+0

Może odpowiedzieć na pytanie http://stackoverflow.com/questions/9791780/readinto-replacement –

+0

@AndreaCorbellini Wystarczy wpisując 'file.readinto?' W ipython , jest to odpowiednik 'help (file.readinto)' w standardowej powłoce Pythona. Sprawdziłem inne metody 'file', jak powiedziałeś, ale tylko' readinto' pokazuje tę wiadomość. –

+1

Czy może chcesz memmap? Http: //docs.scipy.org/doc/numpy-1.10.0/reference/generated/numpy.memmap.html –

Odpowiedz

2

Możesz użyć io.FileIO w bibliotece standardowej Pythona zamiast funkcji wbudowanej open lub file, jeśli nie jesteś pewien z file.readinto.

Oto docstring:

#io.FileIO.readinto? 
Type:  method_descriptor 
String form: <method 'readinto' of '_io.FileIO' objects> 
Docstring: readinto() -> Same as RawIOBase.readinto(). 

Dokument io.RawIOBase.readinto można znaleźć here.

klasa io.RawIOBase

...

readinto (b)

Czytaj maksymalnie len (b) bajtów do tablicaBitowa B i zwraca liczbę bajtów odczytanych. Jeśli obiekt jest w trybie bez blokowania i nie są dostępne żadne bajty, zwracana jest wartość None.

Jest on dostępny zarówno w Python 2 i 3.

Powiązane problemy