2012-11-09 3 views
-1

길이가 4 인 텍스트 문서의 모든 단어를 다른 단어로 바꿔야합니다. 텍스트 문서는 문구가 포함 된 경우Python 3.2 텍스트 문서에서 특정 길이의 모든 단어를 바꿉니 까?

예를 들어, 단어 "와 같은", "매우"및 "수프"그리고 "뭔가"

으로 대체 될 것 "나는 매우 뜨거운 수프를 먹는 것을 좋아" 원본 텍스트 문서를 덮어 쓰는 대신 변경된 구문으로 새 텍스트 문서를 만들어야합니다. 여기

는 내가 지금까지 무엇을 가지고 : 나는 변화 시도했습니다

def replacement(): 
    o = open("file.txt","a") #file.txt will be the file containing the changed phrase 
    for line in open("y.txt"): #y.txt is the original file 
     line = line.replace("????","something") #see below 
     o.write(line + "\n") 
    o.close() 

"????"

(str(len(line) == 4) 

하지만 같은이 숙제처럼 보인다

답변

0

는 우선이 길이 4의 단어를 주어진 것 단어는 그것이 그렇지 않으면 주어진 경우 something을 반환하는 함수를 만들 수 있습니다. 각 반복에는 원본 파일의 행이 있습니다. 그것을 단어로 나눌 수 있습니다.

split_line = line.split() 

기본값은 우리가 원하는 정확히 무엇 인 공백에 분할하는 것입니다 : 파이썬은 우리에게 우리가 사용할 수있는 split 기능을 제공합니다. 원하는 경우 more documentation이 있습니다.join method 사용하여 함께 다시

new_split_line = [maybe_replace(word) for word in split_line] 

이제 우리는이 가입 할 수 있습니다 :

new_line = ' '.join(new_split_line) 

을 그리고 다시 쓰기

이제 우리는 모든 단어에 우리의 maybe_replace 함수를 호출 목록을 얻으려면 파일 :

o.write(new_line + '\n') 

Google의 최종 기능 N은 다음과 같습니다

def replacement(): 
    o = open("file.txt","a") #file.txt will be the file containing the changed phrase 
    for line in open("y.txt"): #y.txt is the original file 
    split_line = line.split() 
    new_split_line = [maybe_replace(word) for word in split_line] 
    new_line = ' '.join(new_split_line) 
    o.write(new_line + '\n') 
    o.close() 
+0

단어 사이에 여분의 공백이 유지되지 않습니다. 이것은 많은 문맥에서 괜찮지 만, 전혀 그렇지 않습니다. – Matt

+0

완벽한 솔루션! 훌륭하게 설명하고 훌륭하게 작동합니다. 고마워. – user1707398

0

그, 그래서 여기에 작동하지 않았다 몇 가지 핵심 개념이다.

파일을 읽을 때 linesstrings입니다. 은 이라는 문자열 메서드를 사용하여 list으로 분할 할 수 있습니다. words = line.split(). 이렇게하면 단어 목록이 만들어집니다.

자, list은 한 번에 그 위에 루프를 사용하고 list의 하나 개의 항목에 대한 작업을 수행 할 수 있습니다 의미 반복 가능한입니다. word의 길이를 확인하고 싶으므로 루프를 사용하여 words을 반복하고 그걸로 무언가를해야합니다. len(word)을 사용하여 단어의 길이를 확인하는 방법을 알아내는 것에 가깝습니다.

이동 중에도 최종 정보를 저장할 장소가 필요합니다. 루프 외부에서 결과를 보려면 list을 만들어야하고, 진행하면서 확인한 단어는 .append()으로 만들어야합니다.

마지막으로 파일의 각 line에 대해이 작업을 수행해야합니다. 즉, 파일을 반복하는 루프의 경우 입니다.

def maybe_replace(word, length=4): 
    if len(word) == length: 
    return 'something' 
    else: 
    return word 

이제 루프를 통해 걸을 수 있습니다 :

0
with open('file.txt', 'a') as write_file: 
    with open('y.txt') as read_file: 
     for line in read_file.readlines(): 
      # Replace the needed words 
      line = line.replace('????', 'something') 
      write_file.write(line) 
1

str.split() 그렇지 사용하여 다른 솔루션으로, 당신은 여분의 공간을 보존합니다.

import re 

exp = re.compile(r'\b(\w{4})\b') 
replaceWord = 'stuff' 
with open('infile.txt','r') as inF, open('outfile.txt','w') as outF: 
    for line in inF: 
     outF.write(exp.sub(replaceWord,line)) 

여기에는 정규 표현식을 사용하여 텍스트를 바꿉니다. 여기에 사용 된 정규 표현식에는 세 가지 주요 부분이 있습니다.

\b 

두 번째 부분은 정확히 네 글자 (모든 영숫자와 _) 일치 : 첫 번째는 단어의 시작과 일치

(\w{4}) 

마지막 부분은 처음처럼을, 그것은 끝을 일치 단어의

\b 
관련 문제