私はいくつかのデータセットを表す行を持つテキストファイルを持っています。ファイル自体はかなり長いが、それは、次の形式の特定のセクションが含まれています。各セクションはSERIES_NAME始まるヘッダを有するPythonファイル検索行と一致後の行数を返します
Series_Name INFO Number of teams : n1
| Team | # | wins |
| TeamName1 | x | y |
.
.
.
| TeamNamen1 | numn | numn |
Some Irrelevant lines
Series_Name2 INFO Number of teams : n1
| Team | # | wins |
| TeamName1 | num1 | num2 |
.
。各Series_Nameは異なります。ヘッダーのある行には、そのシリーズのチーム数n1も含まれます。ヘッダ行の後には、データの表を表す一連の行があります。各シリーズにはテーブルにn1 + 1行があり、各行には個々のチーム名と関連する統計情報が表示されます。 私は、ユーザーがチーム名を検索し、そのチームに関連付けられたテーブルの行を印刷する機能を実装しようとしています。ただし、特定のチーム名が複数のシリーズに掲載されています。 これを解決するために、私は現在、シリーズ名と最初のヘッダー行を検索し、シリーズに関連付けられたデータを表す次のn1 + 1行だけを出力できるように、自分のコードを記述しようとしています。 は、ここで私は今のところ出ているものです:
import re
print
fname = raw_input("Enter filename: ")
seriesname = raw_input("Enter series: ")
def findcounter(fname, seriesname):
logfile = open(fname, "r")
pat = 'INFO Number of teams :'
for line in logfile:
if seriesname in line:
if pat in line:
s=line
pattern = re.compile(r"""(?P<name>.*?) #starting name
\s*INFO #whitespace and success
\s*Number\s*of\s*teams #whitespace and strings
\s*\:\s*(?P<n1>.*)""",re.VERBOSE)
match = pattern.match(s)
name = match.group("name")
n1 = int(match.group("n1"))
print name + " has " + str(n1) + " teams"
lcount = 0
for line in logfile:
if line.startswith(name):
if pat in line:
while lcount <= n1:
s.append(line)
lcount += 1
return result
私のコードの作品の最初の部分。人が探しているヘッダー行に一致し、行を解析し、そのシリーズに含まれるチームの数を出力します。基本的にヘッダー行はテーブルにいくつの行があるかを示しているので、その情報を使用して、設定カウンタがn1に達するまで各行を印刷し続けるループを構築できると考えました。しかし、私はそれを実行しようとしました、そして、私はこれまで設定した方法が間違っていることを認識します。 これは私の質問です:一致する行の後にいくつかの行を戻すには、一致する行の数を指定します。私はプログラミングに慣れていないので、この質問が愚かであれば謝罪します。私は運がないのでこれを非常に勤勉に取り組んでおり、何か助けに感謝します。
ありがとうございました!私はこのようなことで作業できるかどうかを見ていきますが、なぜrange()引数に5が使われていますか? –
@Simos Anderson - あなたが取り入れたい行の数を推測するだけです。私が言ったように、コードはデータの100%ではありません。それはアプローチの概念です。 –