.I
の分割のコメントからのあなたの考えは良いスタートのようです。
以下が動作するように思われる:
with open('crantest.txt') as f:
articles = f.read().split('\n.I')
def process(i, article):
article = article.replace('\n.T\n','.T=')
article = '.T=' + article.split('.T=')[1] #strips off the article number, restored below
article = article.replace('\n.A\n',',.A=')
article = article.replace('\n.B\n',',.B=')
article = article.replace('\n.W\n',',.W=')
return 'article ' + str(i) + ':' + article
data = [process(i+1, article) for i,article in enumerate(articles)]
私は最初の10回の記事(小ヘッダと.I 11
始まるファイルの全てを廃棄する)からなるテストファイルを作成しました。上記のコードを実行すると、長さ10のリストが得られます。最初の行が.I
(前の改行なし)で始まることが重要です。分割の最初のエントリが空であるかどうかをテストする必要がないからです。リストの最初のエントリから始まる文字列です:
article 1:.T=experimental investigation of the aerodynamics of a\nwing in a slipstream .,.A=brenckman,m.,.B=j. ae. scs. 25, 1958, 324.,.W=experimental investigation of the aerodynamics of a\nwing in a slipstream
編集にここでは、連続的に関連するチャンクのプルするpartition
を使用する辞書のバージョンです。これは、辞書の辞書ではなく、文字列のリストを返す:
with open('crantest.txt') as f:
articles = f.read().split('\n.I')
def process(article):
article = article.split('\n.T\n')[1]
T, _, article = article.partition('\n.A\n')
A, _, article = article.partition('\n.B\n')
B, _, W = article.partition('\n.W\n')
return {'T':T, 'A':A, 'B':B, 'W':W}
data = {(i+1):process(article) for i,article in enumerate(articles)}
例えば:
>>> data[1]
{'A': 'brenckman,m.', 'T': 'experimental investigation of the aerodynamics of a\nwing in a slipstream .', 'B': 'j. ae. scs. 25, 1958, 324.', 'W': 'experimental investigation of the aerodynamics of a\nwing in a slipstream .\n an experimental study of a wing in a propeller slipstream was\nmade in order to determine the spanwise distribution of the lift\nincrease due to slipstream at different angles of attack of the wing\nand at different free stream to slipstream velocity ratios . the\nresults were intended in part as an evaluation basis for different\ntheoretical treatments of this problem .\n the comparative span loading curves, together with\nsupporting evidence, showed that a substantial part of the lift increment\nproduced by the slipstream was due to a /destalling/ or\nboundary-layer-control effect . the integrated remaining lift\nincrement, after subtracting this destalling lift, was found to agree\nwell with a potential flow theory .\n an empirical evaluation of the destalling effects was made for\nthe specific configuration of the experiment .'}
デリミタの最初に出現する前に文字列s
の一部からなる三重を返しs.partition()
、区切り文字そのもの、およびその区切り文字が出現した後の文字列の一部です。コード内のアンダースコア(_
)は、意図が戻り値のその部分を破棄することを強調するPythonイディオムです。
あなたは何を試しましたか? [質問ルールを読む] – MYGz
これは、ドットと大文字とオプションの属性だけで構成されたキーワードが行と通常の行にあるように見えます。ファイルを1行ずつ処理して、あなたがどこかでつかまえている場合は、より正確な質問をするためにここに来てください。 –
私はファイル全体を単一の文字列(読み込み時)として読み込み、.Iを区切り文字として使用して文字列を分割しようとしました。それは私に記事のリストを与えました(最初は空の要素がありますが、私はそれを管理できます)。今では、他のタグ/キーワードで記事を分割する必要がありますが、どの要素がどの記事に属しているかはまだ分かります。私は辞書やテーブル/ 2D配列の辞書が必要だと思います。 – Car