Подтвердить что ты не робот

String.strip() в Python

При изучении python я столкнулся с этим кодом, который принимает текстовый файл, разбивает каждую строку на массив и вставляет его в пользовательский словарь, где массив [0] - это ключ, а массив [1] - значение:

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]

Я запустил программу с прокомментированными строками, и я получил тот же результат. (конечно, заменив вторую прокомментированную строку на строку ниже). Мне кажется, что делать strip() необязательно. Лучше ли это оставить его?

4b9b3361

Ответ 1

Если вы можете прокомментировать код и ваша программа все еще работает, то да, этот код был необязательным.

.strip() удаляет все пробелы в начале и конце, включая пробелы, вкладки, новые строки и возврат каретки. Оставляя это, не наносит вреда и позволяет вашей программе иметь дело с неожиданными лишними пробелами, вставленными в файл.

Например, используя .strip(), следующие две строки в файле приведут к такому же результату:

 foo\tbar \n
foo\tbar\n

Я бы сказал, оставьте его.

Ответ 2

В этом случае вы можете получить некоторые отличия. Рассмотрим строку типа:

"foo\tbar "

В этом случае, если вы strip, тогда вы получите {"foo":"bar"} в качестве словаря. Если вы не разделите, вы получите {"foo":"bar "} (обратите внимание на дополнительное пространство в конце)

Обратите внимание, что если вы используете line.split() вместо line.split('\t'), вы разделите каждый символ пробела и "strip ing" будет выполняться при автоматическом расщеплении. Другими словами:

line.strip().split()

всегда совпадает с:

line.split()

а

line.strip().split(delimiter)

Не обязательно эквивалентно:

line.split(delimiter)

Ответ 3

strip ничего не делает, удаляет пробелы в вашей строке. Если вы хотите удалить лишнее белое пространство спереди и сзади вашей строки, вы можете использовать полосу.

Пример строки, которая может проиллюстрировать это:

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

Смотрите, даже после разделения с \t есть дополнительные пробелы в первом и втором элементах, которые можно удалить с помощью полосы в вашем коде.

Ответ 4

strip удаляет пробелы с начала и конца строки. Если вы хотите пробелы, не вызывайте полосу.

Ответ 5

Нет, лучше отказаться от них.

Без strip() у вас могут быть пустые ключи и значения:

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

Без strip() бананы присутствуют в словаре, но с пустой строкой в ​​качестве значения. С strip() этот код генерирует исключение, потому что он удаляет вкладку строки банана.