2009-08-13 3 views
1
class __init__: 
    path = "articles/" 
    files = os.listdir(path) 
    files.reverse() 

    def iterate(Files, Path): 

     def handleXml(content): 

      months = ['', 'January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December'] 

      parse = re.compile('<(.*?)>(.*?)<(.*?)>').findall(content) 
      day = parse[1][1] 
      month = months[int(parse[2][1])] 
      dayN = parse[3][1] 
      year = parse[4][1] 
      hour = parse[5][1] 
      min = parse[6][1] 
      amPM = parse[7][1] 
      title = parse[9][1] 
      author = parse[10][1] 
      article = parse[11][1] 
      category = parse[12][1] 

     if len(Files) > 5: 
      del Files[5:] 

     for file in Files: 
      file = "%s%s" % (Path, file) 
      f = open(file, 'r') 
      handleXml(f.read()) 
      f.close() 

    iterate(files, path) 

시작시 실행되며 파일 배열을 검사하면 모든 파일 이름이 포함됩니다. 그러나 루프를 통과하면 작동하지 않고 첫 번째 디스플레이 만 표시됩니다. 파일을 반환하는 경우 처음 두 파일 만 가져오고, 중복 파일에서도 구문 분석을 반환하면 파일이 일치하지 않습니다. 아무 것도 이해가되지 않습니다.디렉토리에서 모든 내용을 읽고 구문 분석하는 파이썬 루핑

저는 파이썬을 사용하여 간단한 블로그를 만들려고합니다. 제 서버에는 매우 오래된 버전의 파이썬이 있기 때문에 glob과 같은 모듈을 사용할 수 없으므로 모든 것이 가능한 한 기본이되어야합니다.

files 배열에는 디렉터리에있는 모든 파일이 포함되어 있습니다. articles 디렉토리 내의 다른 디렉토리를 검색 할 필요가 없습니다.

그러나 출력 할 때, 심지어는 중복 된 파일에서 다른 결과를 얻습니다.

감사합니다,

+0

게시 한 코드는 iterate() 함수를 호출하지 않으며 아무 것도 출력하지 않습니다. 전체 코드를 게시하십시오. –

+0

또한 들여 쓰기가 잘못되었습니다. 이것은 분명히 파이썬에서 매우 중요합니다. 텍스트 편집기에서와 똑같이 보이도록 수정하십시오. –

답변

1

의 있기 때문에 될 수 있을까요 : 그것은뿐만 아니라 원래 목록에서 마지막 다섯 개 항목을 삭제

del Files[5:] 

. 대신 del를 사용하여, 당신은 시도 할 수 있습니다 :

의견에 명시된 바와 같이
for file in Files[:5]: 
    #... 
+0

작동하지 않았지만 두 줄을 제거하고 원래 배열을 유지하는 좋은 방법입니다. 감사합니다 – Tom

0

, 실제 재귀가 없습니다.
코드의 다른 위치에 있더라도 재귀 호출은 상황이 잘못되는 일반적인 장소이므로이 경우 두 번 확인해야합니다.

그러나 os.walk을 사용하지 않으시겠습니까? 그것은 (재귀) 바퀴를 재발 명할 필요없이 모든 경로를 반복합니다. 그것은 2.3에서 소개되었지만 파이썬이 얼마나 오래되었는지는 알지 못합니다.

+0

내 배열이 문제가되지 않습니다, 그것은 다른 것입니다. 배열을 인쇄하면 모든 파일이 표시됩니다. – Tom

+0

배열의 길이를 확인해 주시겠습니까? 공백으로 구분 된 모든 파일 이름을 가진 1-2 문자열 요소의 배열이있을 가능성이 있기 때문에 묻습니다. –

관련 문제