2015-03-31 14 views
5

Chcę określić przesunięcie, a następnie odczytać bajtów pliku jakCzytaj konkretnych bajtów pliku w Pythonie

offset = 5 
read(5) 

a następnie odczytać następny 6-10 itd Czytałem o poszukiwania, ale nie mogę zrozumieć jak to działa, a przykłady nie są wystarczająco opisowe.

seek(offset,1) zwraca co?

Dzięki

+1

Wskazówka: upewnij się, że otwierasz plik dla dostępu binarnego, na przykład: 'open (filename, 'rb')'. – cdarke

Odpowiedz

4

Wystarczy zagrać z Pythona REPL, aby zobaczyć na własne oczy:

[...]:/tmp$ cat hello.txt 
hello world 
[...]:/tmp$ python 
Python 2.7.6 (default, Mar 22 2014, 22:59:56) 
[GCC 4.8.2] on linux2 
Type "help", "copyright", "credits" or "license" for more information. 
>>> f = open('hello.txt', 'rb') 
>>> f.seek(6, 1) # move the file pointer forward 6 bytes (i.e. to the 'w') 
>>> f.read()  # read the rest of the file from the current file pointer 
'world\n' 
+1

podczas Prawda: fo.seek (offset, 1) b = fo.read() drukowania B wykonując która drukuje B Wszystkie bajty wyjątkiem pierwszego„offset "te ... jestem po prostu zdezorientowany ... – user3124171

+0

OP nie określa, skąd obliczane jest przesunięcie. Jeśli jest to początek pliku, powinno to być 'f.seek (6, 0)' lub po prostu 'f.seek (6)'. Tutaj nie będzie różnicy, ponieważ nie ma pośrednich odczytów w otwartym pliku, aby zmienić bieżącą pozycję strumienia. Ponieważ OP chce kolejnych pięciu znaków po przesunięciu szóstym, odczyt powinien być prawdopodobnie "f.read (5)". –

3

seek niczego nie przydatnych powrócić. Po prostu przenosi wewnętrzny wskaźnik pliku do podanego offsetu. Następny odczyt rozpocznie czytanie od tego wskaźnika.

+0

Cóż, powinien on powrócić 'None': P – inspectorG4dget

4

wartości dla drugiego parametru seek są 0, 1 lub 2:

0 - offset is relative to start of file 
1 - offset is relative to current position 
2 - offset is relative to end of file 

Pamiętaj można sprawdzeniu pomoc -

 
>>> help(file.seek) 
Help on method_descriptor: 

seek(...) 
    seek(offset[, whence]) -> None. Move to new file position. 

    Argument offset is a byte count. Optional argument whence defaults to 
    0 (offset from start of file, offset should be >= 0); other values are 1 
    (move relative to current position, positive or negative), and 2 (move 
    relative to end of file, usually negative, although many platforms allow 
    seeking beyond the end of a file). If the file is opened in text mode, 
    only offsets returned by tell() are legal. Use of other offsets causes 
    undefined behavior. 
    Note that not all file objects are seekable.