2013-03-13 4 views
1

이것은 Project Euler Problem 22에 대한 해결책의 시작입니다. 한 번에 하나의 이름을 생성하려고하는 텍스트 파일의 샘플 버전이 있습니다. This은 문자열 메소드에 대한 문서에 대한 링크입니다. 이 코드의 출력파일에서 문자열 생성

def name_gen(): 
    with open('C:/python/namessample.txt') as nameFile: 
     nameGenerator = (i.strip('"').split(sep='","') for i in nameFile) 
     for name in nameGenerator: 
      yield type(name), type(nameGenerator), type(nameFile), name 

for i in name_gen(): 
    print(i) 

: 나는 작업에 대한 다음과 같은 코드를 작성했습니다 nameFile 및 nameGenerator의 형식이 올바른 것 같다

(<class 'list'>, <class 'generator'>, <class '_io.TextIOWrapper'>, ['DOUGLASS', 'CORDELL', 'OSWALDO', 'ELLSWORTH', 'VIRGILIO', 'TONEY', 'NATHANAEL', 'DEL', 'BENEDICT', 'MOSE', 'JOHNSON', 'ISREAL', 'GARRET', 'FAUSTO', 'ASA', 'ARLEN', 'ZACK', 'WARNER', 'MODESTO', 'FRANCESCO', 'MANUAL', 'GAYLORD', 'GASTON', 'FILIBERTO', 'DEANGELO', 'MICHALE', 'GRANVILLE', 'WES', 'MALIK', 'ZACKARY', 'TUAN', 'ELDRIDGE', 'CRISTOPHER', 'CORTEZ', 'ANTIONE', 'MALCOM', 'LONG', 'KOREY', 'JOSPEH', 'COLTON', 'WAYLON', 'VON', 'HOSEA', 'SHAD', 'SANTO', 'RUDOLF', 'ROLF', 'REY', 'RENALDO', 'MARCELLUS', 'LUCIUS', 'KRISTOFER', 'BOYCE', 'BENTON', 'HAYDEN', 'HARLAND', 'ARNOLDO', 'RUEBEN', 'LEANDRO', 'KRAIG', 'JERRELL', 'JEROMY', 'HOBERT', 'CEDRICK', 'ARLIE', 'WINFORD', 'WALLY', 'LUIGI', 'KENETH', 'JACINTO', 'GRAIG', 'FRANKLYN', 'EDMUNDO', 'SID', 'PORTER', 'LEIF', 'JERAMY', 'BUCK', 'WILLIAN', 'VINCENZO', 'SHON', 'LYNWOOD', 'JERE', 'HAI', 'ELDEN', 'DORSEY', 'DARELL', 'BRODERICK', 'ALONSO']) 

,하지만 이름은 이상적에서 하나의 문자열이어야합니다 시간은 문자열의 목록이 아닙니다. 이름이 목록 인 이유는 .split이 목록을 반환하기 때문입니다. 그러나 파일에서 이름을 구분하는 다른 방법을 찾을 수 없었습니다. 또한 .strip을 사용하여 선행 및 후행 따옴표를 제거했습니다.

답변

5

파일에는 한 행이 포함되어 있으므로 실제로 파일을 반복 할 필요가 없습니다. 분할 목록을 반복하면됩니다.

def name_gen(): 
    with open('C:/python/namessample.txt') as nameFile: 
     for name in nameFile.read().split(','): 
      yield name.strip('"') 

또는 전체 목록 만 반환하면됩니다. 이미 어쨌든 메모리로 읽어했습니다

def name_gen(): 
    with open('C:/python/namessample.txt') as nameFile: 
     return [name.strip('"') for name in nameFile.read().split(',')] 

여러 이름을 포함하는 각 라인에 여러 줄을 한 경우, 중첩 루프 수 :

def name_gen(): 
    with open('C:/python/namessample.txt') as nameFile: 
     for line in nameFile: 
      for name in line.rstrip('\n').split(','): 
       yield name.strip('"')