2

ファイルの形式を編集しようとしていますが、次のようになります。

>クラスター 0
L07510
>クラスター 1
AF480591
AY457083
>クラスター 2
M88154
>クラスター 3
CP000924
L09161
>クラスター 4
AY742307
>クラスター 5
L09163
L09162
>クラスター 6
AF321086
>クラスター 7
DQ666175
>クラスター 8
DQ288 DQ288

各行を通過し、">Cluster x" (x は数値) という行で停止し、その数値を後続の行に追加する何かを Python で記述したいと考えています。その後、新しい ">Cluster x" に到達すると、新しい x 値で再び開始されます。

したがって、次のようになります。

>クラスター0
0 L07510
>クラスター1
1 AF480591
1 AY457083 > クラスター
2 2
M88154 >
クラスター3 3
CP000924
3 L09161 >
クラスター 4
4 AY742307 DQ288691








を使用して(正規表現は次のようになりますか? ) をregex検索し、この一致した正規表現に続く各行をプログラムに追加させることができると考えていました。これを実際に書く方法がわかりません。どんな助けでも大歓迎です!">Cluster x"('\>Cluster \d+')\d+

4

2 に答える 2

2

テスト済み

# If you're on a POSIX compliant system, and this script is marked as 
# executable, the following line will make this file be automatically 
# run by the Python interpreter rather than interpreted as a shell script
#!/usr/bin/env python

# We need the sys module to read arguments from the terminal
import sys

# Open the input file, default mode is 'r', readonly, which is a safe default
infile = open(sys.argv[1])

# Prepare a variable for the cluster number to be used within the loop
cluster = ''

# loop through all lines in the file, but first set up a list comprehension
# that strips the newline character off the line for each line that is read
for line in (line.strip() for line in infile):
    if line.startswith('>'):
        # string.split() splits on whitespace by default
        # we want the cluster number at index 1
        cluster = line.split()[1]

        # output this line to stdout unmodified
        print line

    else:
        # output any other line modified by adding the cluster number
        print cluster + ' ' + line

使用法

$ python cluster_format.py input.txt > output.txt
于 2013-07-03T17:01:41.333 に答える
1

おお、私は解析が大好きです。

契約は次のとおりです。

current_cluster = ""
new_lines = ""

# assuming all this text is in a variable called lines
for line in lines.split("\n"):
    if line.startswith(">Cluster"):
        # 9 characters is ">Cluster "
        current_cluster=line[9:].strip()
    else:
        # otherwise, just take the line itself and prepend the current cluster
        line = "{} {}".format(current_cluster, line)

    new_lines += "{}\n".format(line)
于 2013-07-03T16:51:46.583 に答える