1

この行を持っている:

Breathing 1:-31.145 9:-32.8942 13:-35.8225 2:-35.9872 17:-36.2135 16:-36.6343 12:-36.7487 4:-37.8538 8:-38.6924 7:-39.0389 14:-39.0697 18:-40.0523 3:-40.5393 15:-40.5825 5:-41.6323 11:-45.2976 10:-53.3063 6:-231.617

' ',':-'区切り文字( )以外のすべてを配列に格納したい

4

6 に答える 6

4

更新Breathing:それがあなたのデータの一部であることに気づきませんでした。この場合、すべての文字列を取得します。

仮定:

b = 'Breathing 1:-31.145 9:-32.8942 13:-35.8225 2:-35.9872'

次に、この単純な構造:

 b.replace(':-',' ').split()

あげる:

['Breathing', '1', '31.145', '9', '32.8942', '13', '35.8225', '2', '35.9872']

説明:-: anyをスペース ( )に置き換えます' '。次に、文字列のリストを取得するためのスペースがある場所で文字列を分割します。

float数値の値を取得するには:

['Breathing'] + [float(i) for i in b.replace(':-',' ').split()[1:]]

結果:

['Breathing', 1.0, 31.145, 9.0, 32.8942, 13.0, 35.8225, 2.0, 35.9872]

説明: 上記と同様float()ですが、すべての数値文字列で が使用されて浮動小数点数に変換され、'Breathing' 文字列がリストの先頭に置かれます。

于 2012-06-15T12:29:03.817 に答える
2

使用できますstr.split([sep[, maxsplit]])

区切り文字列として sep を使用して、文字列内の単語のリストを返します。maxsplit が指定されている場合、最大で maxsplit の分割が行われます (したがって、リストには最大で maxsplit+1 要素が含まれます)。maxsplit が指定されていないか -1 の場合、分割数に制限はありません (可能なすべての分割が行われます)。

適用

>> ' 1  2   3  '.split()
['1', '2', '3']

と並行してstr.replace(old, new[, count])

部分文字列 old をすべて new に置き換えた文字列のコピーを返します。オプションの引数 count が指定されている場合、最初の count 個の出現のみが置き換えられます。

適用

>>> a = 'h!e!l!l!o! w!o!r!l!d!'
>>> a.replace('!','')
'hello world'

あなたのシナリオに適用されます:

>> 'Breathing 1:-31.145 9:-32.8942 13:-35.8225 2:-35.9872 17:-36.2135 16:-36.6343
              12:-36.7487 4:-37.8538 8:-38.6924 7:-39.0389 14:-39.0697 18:-40.0523
              3:-40.5393 15:-40.5825 5:-41.6323 11:-45.2976 10:-53.3063 
              6:-231.617'.replace(':-',' ').split(' ')

 ['Breathing', '1', '31.145', '9', '32.8942', '13', '35.8225', '2', 
   '35.9872', '17', '36.2135', '16', '36.6343', '12', '36.7487', '4', '37.8538', 
   '8', '38.6924', '7', '39.0389', '14', '39.0697', '18', '40.0523', '3', 
   '40.5393', '15', '40.5825', '5', '41.6323', '11', '45.2976', 
   '10', '53.3063', '6', '231.617']

すべての定義はマニュアルから取得されます

于 2012-06-15T12:24:21.053 に答える
0

これはあなたが尋ねたものではありませんが、とにかく必要なものかもしれません;-)

lines = ['Breathing 1:-31.145 9:-32.8942 13:-35.8225 2:-35.9872 17:-36.2135 16:-36.6343 12:-36.7487 4:-37.8538 8:-38.6924 7:-39.0389 14:-39.0697 18:-40.0523 3:-40.5393 15:-40.5825 5:-41.6323 11:-45.2976 10:-53.3063 6:-231.617']

data = {}
for line in lines:
    line = line.split()   # split on spaces
    values = (s.split(':-') for s in line[1:])
    data[line[0]] = {int(t):float(val) for t,val in values}

結果は

data = {
    'Breathing': {
        1: 31.145,
        2: 35.9872,
        3: 40.5393,
        4: 37.8538,
        5: 41.6323,
        6: 231.617,
        7: 39.0389,
        8: 38.6924,
        9: 32.8942,
        10: 53.3063,
        11: 45.2976,
        12: 36.7487,
        13: 35.8225,
        14: 39.0697,
        15: 40.5825,
        16: 36.6343,
        17: 36.2135,
        18: 40.0523
    }
}

その後、次のようにアクセスできます

data['Breathing'][2]   # -> 35.9872
于 2012-06-15T13:16:15.983 に答える
0
import re
array=re.split(r'\s+|:-',mystring)

正規表現では、\s+空白に一致:-しますが、文字列内のそのリテラルシーケンスに一致します。パイプ(|)は、これらの条件のいずれかが一致する場合の一致の言い方です。

もちろん、質問で要求されたように、1つのスペースに確実に分割したい場合でも、変更"\s+"することもできます。"\s"" "

于 2012-06-15T12:34:00.460 に答える
0

これを行うには、おそらく正規表現を使用するのが最善の方法です。

import re
re.split('\s+|:-','Breathing 1:-135')

これ['Breathing', '1', '135']はまさにあなたが望むものです。ここで、\s+は 1 つ以上の空白を|表し、 は「または」を表し、:-文字どおりに一致します。

編集:@mgilsonが同じ答えを出しました。とにかく、 python regexのドキュメントを見たいと思うかもしれません。

于 2012-06-15T13:07:07.550 に答える