Странное поведение Python's string.strip () - PullRequest
0 голосов
/ 04 мая 2011

Я получил строку, похожую на эту:

EVENTS: RAID
Volume Set Information 
Volume Set Name : ARC-1120-VOL#00 
Raid Set Name   : Raid Set # 00   
Volume Capacity : 1.0GB
SCSI Ch/Id/Lun  : 00/00/00
Raid Level      : Raid5
Stripe Size     : 64K
Member Disks    : 3
Cache Mode      : Write Back
Tagged Queuing  : Enabled
Volume State    : Degraded

Volume Set Information 
Volume Set Name : ARC-1120-VOL#01 
Raid Set Name   : Raid Set # 00   
Volume Capacity : 5.0GB
SCSI Ch/Id/Lun  : 00/00/01
Raid Level      : Raid5
Stripe Size     : 64K
Member Disks    : 3
Cache Mode      : Write Back
Tagged Queuing  : Enabled
Volume State    : Degraded

И когда я сделал string.strip («СОБЫТИЯ: RAID \ n»), я получил такой результат:

olume Set Information 
Volume Set Name : ARC-1120-VOL#00 
Raid Set Name   : Raid Set # 00   
Volume Capacity : 1.0GB
SCSI Ch/Id/Lun  : 00/00/00
Raid Level      : Raid5
Stripe Size     : 64K
Member Disks    : 3
Cache Mode      : Write Back
Tagged Queuing  : Enabled
Volume State    : Degraded

Volume Set Information 
Volume Set Name : ARC-1120-VOL#01 
Raid Set Name   : Raid Set # 00   
Volume Capacity : 5.0GB
SCSI Ch/Id/Lun  : 00/00/01
Raid Level      : Raid5
Stripe Size     : 64K
Member Disks    : 3
Cache Mode      : Write Back
Tagged Queuing  : Enabled
Volume State    : Degraded

Вопрос: почему исчезла буква V «Информация о наборе томов»?

Как видите, я хочу удалить первую строку, если кто-нибудь знает лучший способ сделать это? (Я знаю, что здесь много "питонических" парней ... дай мне свой лучший шанс =)

Ответы [ 5 ]

3 голосов
/ 04 мая 2011

Поскольку аргумент strip - это строка символов, которую нужно удалить, а ваша включает "V".

Почему вы все равно пропускаете эту строку?

2 голосов
/ 04 мая 2011

Вы прочитали документацию strip()?

Он удаляет любое количество символов, которое вы указали, поэтому .strip("EVENTS: RAID\n") снимает каждый E, каждый V, каждый E, каждый N, ... до тех пор, пока не будет найден один символ, которого нет там! Вот почему V из Volume Set Information пропадает без вести.

Попробуйте replace(string, "EVENTS: RAID\n", "", 1).

1 голос
/ 04 мая 2011

Strip() удалит все начальные символы, которые соответствуют одному из символов, указанных вами в строке параметров.Поскольку 'V' является одним из них (в СОБЫТИЯХ), оно удаляется.

То, что вы хотите сделать, это заменить ведущий "СОБЫТИЯ: RAID \ n".Вы можете использовать регулярные выражения для этого.

1 голос
/ 04 мая 2011

string.strip() удаляет все вхождения заданных символов из начала или конца строки.

Попробуйте что-нибудь в соответствии с

linebreak_pos = string.find("\n")
if linebreak_pos != -1:
    string = string[linebreak_pos:]

или если вы хотите что-то быстрое и грязное,

string = "\n".join(string.split("\n")[1:])
0 голосов
/ 04 мая 2011

Поведение абсолютно правильно.

strip (chars) должен прерывать всех завершающих / ведущих символов, как указано в 'chars'. Речь идет не о выполнении операции string.replace (). Поскольку «V» определено в «chars», вы также потеряете первый «V». Пожалуйста, проверьте документацию string.strip (), если вы в это не верите.

...