2017-09-17 4 views
0

Google 스프레드 시트로 만든 CSV 파일이 있습니다. 여기에는 두 개의 열이 있습니다. 즉, 파일 링크의 열 A와 이름의 열 B가 있습니다. 웹 사이트에서이 코드를 찾았습니다.python - CSV를 기반으로 파일을 다운로드하고 이름을 바꿉니다.

import csv 
import urllib.request 

with open('c:\\links.csv') as csvfile: 
    reader = csv.reader(csvfile, delimiter=',', quotechar='|') 
    for row in reader: 
     fileurl = row[0] 
     filename = row[1] 
urllib.request.urlretrieve(fileurl, "E:\\" + filename)` 

그러나 CSV 파일의 마지막 행만 다운로드합니다. 파이썬 3을 사용하고 있으며 코딩에 익숙하지 않습니다.

+2

'for' 루프 안에'urllib.request'가 없으므로. 'filename'은 루프 내에서 많은 다른 값을 취할 것입니다,하지만 당신은 현재 마지막 것을 보게됩니다. – roganjosh

답변

0

루프를 반복 할 때마다 마지막 할당을 덮어 쓰므로 루프가 끝난 후 변수에 마지막 행을 가져옵니다.

루프 내부의 URL을 검색하고 요청 된 로직을 계속 진행하면 각 행에서 관련 URL을 요청합니다.

각 URL을 요청하면, 내가 루프 종료 후에는 res

import csv 
import urllib.request 
res = [] 
with open('c:\\links.csv') as csvfile: 
    reader = csv.reader(csvfile, delimiter=',', quotechar='|') 
    for row in reader: 
     fileurl = row[0] 
     filename = row[1] 
     res.append(urllib.request.urlretrieve(fileurl, "E:\\" + filename)) 
     ... 
0

그것은 파일 이름입니다 때문에라는 목록에있는 모든 결과가 있도록, 목록에 저장하는 것이 좋습니다 것 fileurl 변수는 매번 업데이트되고 루프에서 빠져 나오면 마지막 행을 포함합니다. 각 행을 처리하려면 루프의 마지막 행을 추가하십시오.

+0

10 분 전에 이미 남긴 대답에 어떻게 추가되는지 잘 모르겠습니다. – roganjosh

0

urllib.request.ulrretrieve으로 전화를 이동하십시오. 나는 이것이 당신이 예상했던 것과 가장 가까운 효과를 낼 것이라고 생각합니다. 반복 할 때마다 fileurlfilename 개의 변수가 .csv의 항목과 일치하도록 변경됩니다.

import csv 
with open('c:\\links.csv') as csvfile: 
    reader = csv.reader(csvfile, delimiter=',', quotechar='|') 
    for row in reader: 
     fileurl = row[0] 
     filename = row[1] 
     urllib.request.urlretrieve(fileurl, "E:\\" + filename) 
관련 문제