2014-07-08 2 views
-1

사이트에서 파일을 다운로드하고 원본 파일을 저장 한 다음 파일을 다운로드 한 url과 다운로드 날짜를 파일을 다른 디렉토리에 저장하십시오.파이썬 csv : 다른 디렉토리에 쓰기

나는 CSV 개정이 답변을 사용했습니다 : how to Add New column in beginning of CSV file by Python

을하지만 쓰기() 함수가 호출되기 전에 다른 디렉토리에 파일을 리디렉션 할 사투를 벌인거야.

파일을 쓰고 이동 시키거나, open() 함수 내에서 다른 디렉토리에 파일을 쓰는 방법이 있습니까?

if fileName in fileList: 
    print "already got file "+ fileName 
else: 
    # download the file 
    urllib.urlretrieve(csvUrl, os.path.basename(fileName)) 
    #print "Saving to 1_Downloaded "+ fileName 

    # open the file and then add the extra columns 
    with open(fileName, 'rb') as inf, open("out_"+fileName, 'wb') as outf: 
     csvreader = csv.DictReader(inf) 

     # add column names to beginning 
     fieldnames = ['url_source','downloaded_at'] + csvreader.fieldnames 
     csvwriter = csv.DictWriter(outf, fieldnames) 
     csvwriter.writeheader() 
     for node, row in enumerate(csvreader, 1): 
      csvwriter.writerow(dict(row, url_source=csvUrl, downloaded_at=today)) 
+0

당신이 새로운 밖으로 파일을 작성 : –

+0

예, 새로운 출력 파일을 만들어야합니다. – woodbine

+0

왜 열 때 파일을 저장할 디렉토리에 파일을 만들지 않으십니까? –

답변

0

나는 둘 다 작동한다고 믿습니다. 나에게 파일을 추가하고 나중에 옮기는 것이 가장 깔끔한 방법입니다. shutil.move

내가 덜 효율적이 될 것입니다 전체 파일을 다시 작성 보라 :

은 보라.

+0

어떤 코드가 더 효율적인 지 확인하려면 시간을 잰 적이 있습니까? –

+0

코드는 일주일에 한 번 실행되므로 속도가 가장 중요한 요소는 아니므로 가능하면 적은 수의 줄을 쓰고 싶습니다. – woodbine

0

파일을 다시 작성하지 않아도됩니다. 시간 모듈을 사용하여 파일 이름의 타임 스탬프 문자열을 만들고 os.rename을 사용하여 파일을 이동하십시오.

os.rename ('filename.csv', 'NEW_dir/filename.csv')이 도움이

희망 : -

예이 당신의 지정된 위치에 파일을 이동합니다.

# move and rename the 'out_' files to the right dir 
source = os.listdir(downloaded) 

for files in source: 
    if files.startswith('out_'): 
     newName = files.replace('out_','') 
     newPath = renamed+'/'+newName 
     shutil.move(files,newPath) 
+0

소스 데이터의 정확한 아카이브를 제공하기 위해 원본 '손길이 닿지 않은'상태 (inc 파일 이름)로 파일 사본을 저장해야합니다. 그러면 모든 수정 사항이 diff 디렉토리에 저장됩니다. 조언을 감사드립니다. 감사합니다. 감사합니다. – woodbine

0

은 결국 추가 루틴을 사용하여 또 shutil으로 갔다?