2013-08-28 2 views
0

urllib2.urlopen을 사용하여 파일을 가져 오는 python 스크립트가 있습니다. 기본적 흐름은 다음과 같습니다 자사가 수정 된 경우 if-not-modified 헤더 파일에 대한이 파일이 파일 시스템에 쓰지 않는 이유

  1. 보면, 거기에 물건을 할 파일 시스템

  2. 없는 경우에 그것의 사본을 쓰기는 잡아 스크립트가 이렇게 실행 된 그 처음이 수정되지 않은 로컬 복사본 가없는 경우 우리가 이전 요청에 저장하고

  3. 에 물건을 할 파일의 로컬 복사본을 복사 우리 같은 것을 만들 필요가있다. 예상대로 마지막 부분에 대해 로컬 뿐만 아니라

코드를 복사없이 if-not-modified 헤더 및 저장과 요청이 작동하지 않습니다.

except IOError, e: 
    #This is the first attempt to download the file. 
    pathWithNoHeader = ROOT_PATH + uri 
    requestWithNoHeader = urllib2.Request(pathWithNoHeader) 
    sourcefileWithNoHeader = urllib2.urlopen(requestWithNoHeader) 
    document = ET.parse(sourcefileWithNoHeader) 
    dir = os.path.dirname(__file__) 
    statefile = open(os.path.join(dir, STATE_FILES) + uri, 'w+') 
    statefile.write(sourcefileWithNoHeader.read()) 
    statefile.close() 

이 성공적으로 실패 파일 (내가 노력하고있어 다른 물건이이 성공하여 정보와 함께 할 얻었 기 때문에 내가 아는)하지만 시스템 파일에 파일을 쓰기를 가져 : 아래의 3 경우 처리하는 코드를 볼 수 오류없이. 기본적으로 파일은 생성되었지만 비어 있습니다. 나는 Python을 처음 접했고 (몇 달), 나는 완전히 당황 스러웠다. statefile.write(sourcefileWithNoHeader.read())은 범인과 같지만 다른 종류의 코드에서 동일한 종류의 코드가 작동합니다. 내가 잘못 아니에요 경우

document = ET.parse(sourcefileWithNoHeader) 

은 요소 트리를 호출입니다 : 어떤 도움도 문제가 먼저 호출 있다는 것입니다

+0

당신이 시도해 봤어 구문 분석하기 전에 StringIO에 내용을 저장 해결하기 위해'읽기 전에'sourcefileWithNoHeader.seek (0)'()'을 보내고? – Bakuriu

+0

. 나 지금 그걸 시도하자. – Brad

답변

2

을 감상 할 수있다. 이것은 이미 파일의 내용을 읽을 것이므로, read를 수행하면 빈 문자열이 반환됩니다. 이 결과를 인쇄하기 전에

sourcefileWithNoHeader.read() 

글자를 인쇄하기 전에 확인할 수 있습니다.

이 문제가 단순히

contents = StringIO(sourcefileWithNoHeader.read()) 
ET.parse(contents) 
statefile.write(contents.getvalue()) 
+0

너 락! 감사 – Brad