Powershell - странное поведение с .split [duplicate]

Еще один способ заменить исходные метки столбцов - удалить ненужные символы (здесь '$') из исходных ярлыков столбца.

Это могло быть сделано путем запуска цикла for по df. столбцы и добавление разделенных столбцов в df.columns.

Вместо этого мы можем сделать это аккуратно в одном выражении, используя понимание списка, как показано ниже:

df.columns = [col.strip('$') for col in df.columns]

(strip метод в Python передает данный символ из начала и конца строки.)

12
задан Ievgen 8 May 2013 в 08:47
поделиться

4 ответа

Оператор -split использует строку для разделения, вместо chararray like Split():

$string = "5637144576, messag<>est<<>>5637145326, 1<<>>5637145328, 0"
$separator = "<<>>"
$string -split $separator

5637144576, messag<>est
5637145326, 1
5637145328, 0

Если вы хотите использовать метод Split() со строкой, вам понадобится $seperator быть строковым символом с одним элементом, а также указать значение stringsplitoptions. Вы можете увидеть это, проверив его определение:

$string.Split

OverloadDefinitions                                                                                
-------------------                                                                                
string[] Split(Params char[] separator)                                                            
string[] Split(char[] separator, int count)                                                        
string[] Split(char[] separator, System.StringSplitOptions options)                                
string[] Split(char[] separator, int count, System.StringSplitOptions options)                     

#This one
string[] Split(string[] separator, System.StringSplitOptions options)      
string[] Split(string[] separator, int count, System.StringSplitOptions options)


$string = "5637144576, messag<>est<<>>5637145326, 1<<>>5637145328, 0"
$separator = [string[]]@("<<>>")
$string.Split($separator, [System.StringSplitOptions]::RemoveEmptyEntries)

5637144576, messag<>est
5637145326, 1
5637145328, 0

EDIT: Как отметил @RomanKuzmin, -split по умолчанию использует шаблоны регулярных выражений. Поэтому имейте в виду избежать специальных символов (например, ., которые в регулярном выражении являются «любым символом»). Вы также можете заставить simplematch отключить регулярное выражение, например:

$separator = "<<>>"
$string -split $separator, 0, "simplematch"

Подробнее о -split здесь .

17
ответ дан Laurel 31 August 2018 в 19:51
поделиться

Необходимо следующее:

 $string -Split $separator

Это дает:

5637144576, messag<>est
5637145326, 1
5637145328, 0
0
ответ дан David Martin 31 August 2018 в 19:51
поделиться

Вместо использования метода Split вы можете использовать оператор split. Таким образом, ваш код будет выглядеть следующим образом:

$string -split '<<>>'
1
ответ дан Piotr Stapp 31 August 2018 в 19:51
поделиться

Иногда PowerShell выглядит точно так же, как на C # и в других, хорошо знаете ...

Его также можно использовать таким образом:

# A dummy text file
$text = @'
abc=3135066977,8701416400

def=8763026853,6433607660

xyz=3135066977,9878763344
'@ -split [Environment]::NewLine,[StringSplitOptions]"RemoveEmptyEntries"

"`nBefore `n------`n"

$text

"`nAfter `n-----`n"

# Do whatever with this
foreach ($line in $text)
{
    $line.Replace("3135066977","6660985845")
}
1
ответ дан Vince Ypma 31 August 2018 в 19:51
поделиться
Другие вопросы по тегам:

Похожие вопросы: