Sznurek.strip () w Pythonie

Podczas nauki o Pythonie natknąłem się na ten kod, który pobiera plik tekstowy, dzieli każdą linię na tablicę i wstawia ją do niestandardowego słownika, gdzie tablica[0] jest kluczem, a tablica [1] jest wartością:

my_dict = {}

infile = open("file.txt")
for line in infile:
    #line = line.strip() 
    #parts = [p.strip() for p in line.split("\t")]
    parts = [p for p in line.split("\t")]
    my_dict[parts[0]] = parts[1]
    print line

for key in my_dict:
    print "key: " + key + "\t" + "value " + my_dict[key]

Uruchomiłem program z wyłączonymi i włączonymi komentarzami i uzyskałem ten sam wynik. (oczywiście zastąpienie drugiej komentowanej linii linią pod nią). wydaje mi się, że robienie strip() jest opcjonalne. Czy lepiej poćwiczyć, żeby to zostawić?

Author: igaurav, 2012-10-22

5 answers

Jeśli możesz skomentować kod, a twój program nadal działa, to tak, ten kod był opcjonalny.

.strip() bez argumentów (lub None jako pierwszy argument) usuwa wszystkie białe znaki na początku i końcu, w tym spacje, tabulatory, nowe linie i powroty karetki. Pozostawienie go w pliku nie wyrządza żadnej szkody i pozwala programowi radzić sobie z nieoczekiwanymi dodatkowymi białymi spacjami wstawionymi do pliku.

Na przykład, używając .strip(), następujące dwie linie w pliku prowadzą do tego samego wynik końcowy:

 foo\tbar \n
foo\tbar\n
/ Align = "left" /
 60
Author: Martijn Pieters,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-08-27 13:54:11

W tym przypadku, możesz mieć pewne różnice. Rozważ wiersz w stylu:

"foo\tbar "

W tym przypadku, jeśli strip, otrzymasz {"foo":"bar"} jako wpis słownika. Jeśli nie rozbierzesz się, otrzymasz {"foo":"bar "} (zwróć uwagę na dodatkowe miejsce na końcu)

Zauważ, że jeśli użyjesz line.split() zamiast line.split('\t'), podzielisz się na każdy znak spacji, a "strip ing " zostanie wykonane automatycznie podczas dzielenia. Innymi słowy:

line.strip().split()

Jest zawsze identyczne do:

line.split()

Ale:

line.strip().split(delimiter)

Niekoniecznie jest równoważne:

line.split(delimiter)
 13
Author: mgilson,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-10-22 14:40:44

strip usuwa białe znaki w ciągu znaków. Jeśli chcesz usunąć dodatkowe białe znaki z przodu iz tyłu Sznurka, możesz użyć paska.

Przykładowy ciąg znaków, który może to zilustrować jest następujący:

In [2]: x = "something \t like     \t this"
In [4]: x.split('\t')
Out[4]: ['something ', ' like     ', ' this']

Widzisz, nawet po podzieleniu z {[2] } w pierwszym i drugim elemencie są dodatkowe białe spacje, które można usunąć za pomocą strip w kodzie.

 6
Author: Senthil Kumaran,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-10-22 14:43:05

strip usuwa białe znaki z początku i końca łańcucha. Jeśli chcesz białą spację, nie dzwoń do paska.

 0
Author: zmbq,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-10-22 14:40:46

Nie, lepiej jest je pomijać.

Bez strip (), możesz mieć puste klucze i wartości:

apples<tab>round, fruity things
oranges<tab>round, fruity things
bananas<tab>

Bez strip(), bananas jest obecny w słowniku, ale z pustym łańcuchem jako wartością. Za pomocą strip (), kod ten rzuci wyjątek, ponieważ usunie kartę linii bananowej.

 0
Author: Sjoerd,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-10-22 14:41:17