2017-11-19 4 views
0

このプロセスをPythonで動作させるか、まったく動作させる方法を見つけようとします。基本的に、私は本当に長いテキストファイルをラインに分割しています。 x行にはすべて、主に大文字の行があります。大まかに、その特定のセクションのタイトルにする必要があります。理想的には、タイトルとそのすべてをファイルの名前としてタイトルを使用してテキストファイルに入れたいと思っています。この場合、多くのタイトルがそこにあるので、これは3039年に起こるはずです。 これまでの私のプロセスは次のとおりです。テキストファイルを読み込む変数を作成して、大文字であるかどうかを教えてくれました。その後範囲が変更されるたびに範囲の各セットのすべての行を新しいファイルに書き出します。Python 3.6

def mostly_uppercase(text): 
    threshold = 0.7 
    isupper_bools = [character.isupper() for character in text] 
    isupper_ints = [int(val) for val in isupper_bools] 
    try: 
     upper_percentage = np.mean(isupper_ints) 
    except: 
     return False 
    if upper_percentage >= threshold: 
     return True 
    else: 
     return False 

、私はインデックスを作成することができるように、私はカウンターを作った後、私はそれを組み合わせる:

counter = 0 

headline_indices = [] 

for line in page_text: 
    if mostly_uppercase(line): 
     print(line) 
     headline_indices.append(counter) 
    counter+=1 

headlines_with_articles = [] 
headline_indices_expanded = [0] + headline_indices + [len(page_text)-1] 

for first, second in list(zip(headline_indices_expanded, headline_indices_expanded[1:])): 
    article_text = (page_text[first:second]) 
    headlines_with_articles.append(article_text) 

ことのすべては、私の知る限り正常に動作しているようです。しかし、私がファイルにしたい部分を印刷しようとすると、テキスト全体をすべてのtxtファイルに出力するだけです。

for i in range(100): 
    out_pathname = '/sharedfolder/temp_directory/' + 'new_file_' + str(i) + '.txt' 
    with open(out_pathname, 'w') as fo: 
     fo.write(articles_filtered[2]) 

編集:これは私にそこに私を得た。さて、最初の行で各ファイルに名前を付ける方法が必要です。単一の入力ファイルを処理する

for i,text in enumerate(articles_filtered): 
    open('/sharedfolder/temp_directory' + str(i + 1) + '.txt', 'w').write(str(text)) 

答えて

0

一つの従来の方法は、以下のように、Pythonのwith文とforループを使用することを含みます。大文字を数えたり、必要な分数を得るために、他の人からの良い答えを適用しました。

def mostly_upper(text): 
    threshold = 0.7 
    ## adapted from https://stackoverflow.com/a/18129868/131187 
    upper_count = sum(1 for c in text if c.isupper()) 
    return upper_count/len(text) >= threshold 

first = True 
out_file = None 
with open('some_uppers.txt') as some_uppers: 
    for line in some_uppers: 
     line = line.rstrip() 
     if first or mostly_upper(line): 
      first = False 
      if out_file: out_file.close() 
      out_file = open(line+'.txt', 'w') 
     print(line, file=out_file) 
out_file.close() 

ループでは、大文字かどうかを確認するために各行を読み込みます。現在の行の内容をタイトルとして使用して、前の行のコレクションに使用されていたファイルを閉じ、次のコレクションの新しいファイルを開きます。

最初の行がかもしれない可能性があります。はタイトルではありません。この場合、コードは最初の行の内容を名前としてファイルを作成し、見つかったすべてのファイルをに書き込んで、がタイトル行を見つけるまで続けます。

関連する問題