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() необязательно. Лучше ли это оставить его?
Ответы
Ответ 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() этот код генерирует исключение, потому что он удаляет вкладку строки банана.