2016-11-11 12 views
-2

私は非常に基本的なレベルのPythonを書くことができます。このpython 3コードをpython 2.7に変換するには?

import sys 
inf = open (sys.argv[1], 'r') 
ouf = open (sys.argv[2], 'w') 

def summarize(data:list, crit:float, run:int)->list: 
    i = 0 
    s = [] 
    while i < len(data): 
     j = i 
     while (j < len(data)) and (crit <= data[j]): 
      j += 1 
     if run <= j - i: 
      s.append('{}-{}'.format(i+1, j)) 
     i = j+1 
    return s 

def transfer(head:str, data:list, sink:open, crit:float, run:int)->None: 

    summary = summarize(data, crit, run) 
    if summary: 
     sink.write('{}: {}\n'.format(head, ', '.join(summary))) 

def collect(source:open, sink:open, crit:float = 0.5, run:int = 1)->None: 

    data = head = [] 
    for line in source: 
     L = line.strip() 
     if not L.startswith('#'): 
      data.append(float(L.split()[-1])) 
     else: 
      transfer(head, data, sink, crit, run) 
      data = [] 
      head = L[1:].strip() 
    transfer(head, data, sink, crit, run) 

collect(inf, ouf) 
inf.close() 
ouf.close() 

(INPUT.TXTが)のようなファイルに変換:に

# IUPred 
# Copyright (c) Zsuzsanna Dosztanyi, 2005 
# 
# Z. Dosztanyi, V. Csizmok, P. Tompa and I. Simon 
# J. Mol. Biol. (2005) 347, 827-839. 
# 
# 
# Prediction output 
# NP_414578.2 
    1 M  0.4476 
    2 S  0.5286 
    3 E  0.7328 
    4 S  0.8019 
    5 L  0.2094 
    6 H  0.2503 
    7 L  0.1791 
    8 T  0.9193 
# IUPred 
# Copyright (c) Zsuzsanna Dosztanyi, 2005 
# 
# Z. Dosztanyi, V. Csizmok, P. Tompa and I. Simon 
# J. Mol. Biol. (2005) 347, 827-839. 
# 
# 
# Prediction output 
# NP_418290.4 
    1 M  0.5328 
    2 E  0.8759 
    3 S  0.5323 
    4 W  0.1942 
    5 L  0.2575 
    6 I  0.8823 
    7 P  0.8034 
    8 A  0.2258 
    9 A  0.2541 
    10 P  0.8783 
    11 V  0.1002 
    12 T  0.3583 

(私はこのPythonの3スクリプト(ARGV 1及び2はINPUT.TXTとoutput.txtとされている)が見つかりました。

NP_414578.2: 2-4, 8-8 
NP_418290.4: 1-3, 6-7, 10-10 

つまり、最後の列の値が> = 0.5である範囲(最初の列)がリストされます。

実際には、これはpython2で書かれた事前に公開されたpythonソフトウェアパッケージを使用して生成された自分のデータを解析するための理想的なサポートスクリプトになります。これらの既存のツールを追加するには、上記のスクリプトをpython2に変換する必要があります。

py3to2を使用しようとしましたが、別のスクリプトはありません。

私のpython 2.

に変換する方法を提案してください最終的には、この中に終わるyou..Iのすべてによって示唆されるように、あなたに

+1

ここに野生のアイデアがあります:それをPython 2で実行し、それが動作するかどうかを確認してください。それはありませんか?お気に入りの検索エンジンを使用してソリューションをチェックし、自分で修正してみてください。うまくいかない?ここに問題を投稿してください。ヒント:Python 2と3がどのようにファイルを扱うかを詳しく見てみましょう。 –

+0

メソッドのシグネチャの明示的な型を削除するだけです – RafaelC

+0

次のエラーが表示されたらpy2.7で実行します:ファイル "script.py"、行5 def summarize(data:list、crit:float、run:int) - >リスト: ^ SyntaxError:無効な構文 –

答えて

0

ありがとう:

import sys 
inf = open (sys.argv[1], 'r') 
ouf = open (sys.argv[2], 'w') 


def summarize(data, crit, run): 
    'e' 
    i = 0 
    s = [] 
    while i < len(data): 
     j = i 
     while (j < len(data)) and (crit <= data[j]): 
      j += 1 
     if run <= j - i: 
      s.append('{}-{}'.format(i+1, j)) 
     i = j+1 
    return s 

def transfer(head, data, sink, crit, run): 
    'et' 

    summary = summarize(data, crit, run) 
    if summary: 
     sink.write('{}: {}\n'.format(head, ', '.join(summary))) 

def collect(source, sink, crit = 0.5, run = 1): 
    'etc' 

    data = head = [] 
    for line in source: 
     L = line.strip() 
     if not L.startswith('#'): 
      data.append(float(L.split()[-1])) 
     else: 
      transfer(head, data, sink, crit, run) 
      data = [] 
      head = L[1:].strip() 
    transfer(head, data, sink, crit, run) 

collect(inf, ouf) 
inf.close() 
ouf.close() 

はそれのように思えます働く何か不気味なことがあれば教えてください。

ありがとうございました

関連する問題