0

次のようなデータセットがあります。

atom 01 B   HEL A1001 -1.09 32.90 22.99  
atom 02 C   ARG A1002 -3.22 22.89 12.00  
atom 03 C1  ARG A1003 -2.99 18.32 22.13  
atom 04 CW2AARG A1004 -2.22 19.99 29.84  
atom 05 WS  HEL A1005 -3.22 18.33 14.21

...
私が探しているのは、3 行目のインデントの問題を修正するか、AARG の前に「スペース」を追加するか、スペース列を作成することです。最終的には次のようになります。

atom 01 B    HEL A1001 -1.09 32.90 22.99  
atom 02 C    ARG A1002 -3.22 22.89 12.00  
atom 03 C1   ARG A1003 -2.99 18.32 22.13  
atom 04 CW2  AARG A1004 -2.22 19.99 29.84  
atom 05 WS   HEL A1005 -3.22 18.33 14.21

を使用しfor line in map(str.split, inp): x=line[2]
て列を選択しようとしましたが、line[2]列の選択が間違っています. forおよびfor lineCW2AARGではなく、単一の列エントリとして来るためです。 アプローチをどのように変更すればよいかについてのアイデア...CW2line[2]AARGline[3]

4

2 に答える 2

1

あなたが望むものを達成するためにスライス方法を試してみてください。
そんなに複雑に考えないでください。
を使用map(str.split,inp)すると、複雑になるだけです。

于 2013-07-21T13:37:04.100 に答える
0

この列の結合が発生したときにアミノ酸 ID が 4 文字の長さになり、これが問題のある唯一の列であると仮定すると、このコードは機能するはずです。

pdb_data = []
for line in open('input.txt'):
    line = line.split()
    if len(line)<8:
        pre = line[0:2]
        post = line[3:]
        col3 = line[2][:-4]
        col4 = line[2][-4:]
        new_line = pre+[col3,col4]+post
        pdb_data.append(new_line)
    else:
        pdb_data.append(line)

常に 4 文字の長さではない場合は、文字列を分割する場所にいくつかの基本的なルールを適用してみてください: 文字列内の文字が数字に達した場合: そこで分割します。

于 2013-07-21T04:49:13.867 に答える