1

これが私の入力ファイルのサンプルです(z.txt)

>qrst
ABCDE--  6  6 35 25 10
>qqqq
ABBDE--  7  7 28 29  2

英字と数値を別々のリストに保存します。これが数値リストの出力です #Output : ['', '6', '', '6', '35', '25', '10'] ['', '7', '', '7 '、'28'、'29'、''、'2']

ファイルの作成方法により、1 桁の場合、出力に余分なスペースが含まれます。'' (空のスペース) を取り除く方法はありますか?

4

3 に答える 3

1

filterそのためにNoneas 関数を利用できます。

numbers = ['', '7', '', '7', '28', '29', '', '2']
numbers = filter(None, numbers)
print numbers

ここで実際の動作を確認してください: https://eval.in/640707

于 2016-09-13T03:20:37.647 に答える
1

入力が次のようになっている場合:

>>> li=[' 6  6  35  25  10', ' 7 7 28  29 2']

.split()繰り返される空白を単一の区切り文字として処理する which を使用するだけです:

>>> [e.split() for e in li]
[['6', '6', '35', '25', '10'], ['7', '7', '28', '29', '2']]

.split(" "):

>>> [e.split(" ") for e in li]
[['', '6', '', '6', '', '35', '', '25', '', '10'], ['', '7', '7', '28', '', '29', '2']]
于 2016-09-13T04:08:03.240 に答える
0

これを行うには多くの方法があると思います。私は正規表現を使用することを好みますが、数万行の大きな入力ファイルがある場合は遅くなる可能性があります。小さいファイルの場合は問題ありません。

いくつかのポイント:

  1. コンテキスト マネージャー (withステートメント) を使用してファイルを開きます。ステートメントが終了するwithと、ファイルは自動的に閉じられます。

  2. の代替re.findall()re.match()またはre.search()です。以降のコードは少し異なります。

  3. Itorgとは要素ごとに関連しています。代わりに、3 要素のタプルのリストを維持することをお勧めしますsequencenumbersもちろん、組織フィールドをバッファリングし、次の行が取得されたときにタプルのリストに追加します。

    import re
    
    org = []
    sequence = []
    numbers = []
    
    with open('ddd', 'r') as f:
        for line in f.readlines():
            line = line.strip()
            if re.search(r'^>', line):
                org.append(line)
            else:
                m = re.findall(r'^([A-Z]+--)\s+(.*)\s+', line)
                if m:
                    sequence.append(m[0][0])
                    numbers.append(map(int, m[0][1].split())) # convert from str to int
    
    print(org, sequence, numbers)
    
于 2016-09-13T03:58:53.027 に答える