0

次の形式のファイルを解析しようとしています

1999
I
Willem Jan van Steen         9859  77
Guillaume Kielmann           5264  77
Guillaume Bos                8200   6

(このファイルはもっと長く、学年 (1999 など) と別の研究 (「I」など) で区切られています。私が作業しなければならないのは、最後の数字 (77、77、6 など) だけです。この数字は最終的な目標は、10 本の棒で構成される BarChart を作成することです。棒グラフは、ファイルからのパーセンテージが棒グラフの範囲 (たとえば、70 から 80 の棒グラフ) に収まる回数の量 (合計) で構成されます。 % --> 上記の入力がファイル全体の場合、合計は 2 になり、棒グラフの高さは 2 になります。しかし、私の最初の問題は、入力を解析する方法がわからないことです。行を読み取ってから、パーセンテージ数が数値で「何かをする」ことを開始するインデックスから(範囲を作成します)(-->棒グラフのどの範囲に該当するかを確認し、その棒グラフにパーセンテージが何回該当するかを合計するためのループを作成します..)

誰かが私を助けてくれることを願っています!

4

1 に答える 1

0

str.rsplit()右から数えて、文字列を単語に分割するために使用します。渡すとNone、任意の幅の空白で分割され、きれいに削除された文字列とカウントが得られ、最初の列に空白を保持できます。

それが何を意味するかの短いデモ:

>>> 'Willem Jan van Steen         9859  77\n'.rsplit(None, 2)
['Willem Jan van Steen', '9859', '77']

ここでは、名前のスペースは保持されますが、末尾の 2 つの数字はリスト内の個別の要素になりました。最後の改行はなくなりました。

開いているファイル オブジェクトをループすると、別々の行が得られ、ファイルを 1 行ずつ解析する方法が得られます。

with open(inputfilename) as inputfh:
    for line in inputfh:
        columns = line.rsplit(None, 2)
        if len(columns) < 3:
            continue  # not a line with name and numbers
        percentage = int(columns[2])
        if 70 <= percentage <= 80:
            # we have a line that falls within your criteria
于 2013-11-21T10:48:44.810 に答える