2015-02-24 18 views
5

wyobrazić mamy file = open("filetext.txt", 'r')różnica między readlines() oraz split() [python]

jaka jest różnica między metody split() i readlines() metoda Wydaje się, że zarówno w ułamku każdej linii i umieścić to jako ciąg na liście. więc co je wyróżnia?

for line in file: 
    values = line.split()  #break each line into a list 

file.readlines() #return a list of strings each represent a single line in the file 

Odpowiedz

3

readlines dzieli cały plik na linie i jest równoważny z file.read().split('\n'), ale jest nieco bardziej wydajny. Twój przykład, dzieli każdą linię za jej spacje, budując listę słów w linii. value jest nadpisywany przy każdej iteracji, więc dopóki nie zapiszesz gdzieś wartości, tylko części pliku będą w pamięci za jednym razem.

0

To jest główna różnica:

file obiekt ma readlines ale nie split:

>>> print hasattr(file, 'split') 
False 
>>> print hasattr(file, 'readlines') 
True 

str obiekt ma split ale nie readlines:

>>> hasattr("somestring", 'split') 
True 
>>> hasattr("somestring", 'readlines') 
False 

Aby odpowiedzieć na twoje pytanie, jeden działa na obiekcie typu string, a drugi działa na obiekcie pliku.

Nie robią tego samego, ponieważ zwraca się listę linii podczas pracy z plikiem, a jedna zwraca linię podziału podczas działania na łańcuchu.

+1

Również [ 'readlines'] (https://docs.python.org/3/distutils/apiref.html?highlight=readlines#distutils.text_file.TextFile. readlines) nie przyjmuje argumentów i może przełamać tylko znaki nowej linii. Z drugiej strony, ['split'] (https://docs.python.org/3/library/stdtypes.html#str.split) może przyjmować argumenty i dzielić na _any_ znak, który rozdzielasz. Ponadto 'split' nie musi dzielić się na wszystkie opcje, ale może być ograniczone. – BobChao87

1

readlines dokonuje podziału linii agnostycznej na platformę i split wykonuje podział ogólny.

Jako przykład:

In [1]: from StringIO import StringIO 

In [2]: StringIO('test:test:test').readlines() 
Out[2]: ['test:test:test'] 

In [3]: StringIO('test:test:test').read().split(':') 
Out[3]: ['test', 'test', 'test'] 
Powiązane problemy