2017-11-19 11 views
0

이 프로세스가 파이썬으로 또는 전혀 작동하지 않게 만드는 방법을 찾으려고 시도합니다. 기본적으로, 나는 줄로 나뉘어 진 정말 긴 텍스트 파일을 가지고있다. 모든 x 개의 줄 수는 주로 대문자 인 줄입니다.이 줄은 대략 해당 구역의 제목이어야합니다. 이상적으로는 제목과 그 이후의 모든 내용을 제목을 파일 이름으로 사용하여 텍스트 파일로 이동하는 것이 좋습니다. 이 경우에는 많은 책이 거기에있을 것이므로이 경우 3039가 발생해야합니다. 지금까지의 프로세스는 다음과 같습니다. 텍스트 파일을 읽는 변수를 작성하여 대부분 대문자인지 알려줍니다.범위가 변경 될 때마다 범위의 각 집합에 대한 모든 행을 새 파일에 작성하여 파이썬 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

한 기존의 방법은 다음과 같은 방법으로, 파이썬 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() 

루프에서 각 줄을 읽어서 대부분 대문자인지 확인합니다. 현재 줄의 내용을 제목으로 사용하여 이전 줄 모음에 사용 된 파일을 닫고 다음 모음에 대한 새 파일을 엽니 다.

나는 첫 줄이 일 수도 있고,이 제목이 아닐 수도 있습니다. 이 경우 코드는 첫 번째 행의 내용이 이름으로 된 파일을 생성하고 까지이 제목 줄을 찾을 때까지 찾은 모든 내용을 파일에 기록합니다.