스크립트에서 같은 작업을 많은 데이터에 반복할 때, 한 번 도는데 엄청나게 오래 걸리거나
다른 사이트 리소스를 쓰기 때문에 괜히 민폐를 안 끼치려고 앞 부분만 테스트하는 게 좋을 때가 많습니다.
한 번만 돌릴 때는 이렇게 보통..
1 2 3 4 |
<span class="k">for</span> <span class="n">url</span> <span class="ow">in</span> <span class="err">엄청많은</span><span class="n">URL</span><span class="p">:</span> <span class="n">f</span> <span class="o">=</span> <span class="n">urllib</span><span class="o">.</span><span class="n">urlopen</span><span class="p">(</span><span class="n">url</span><span class="p">)</span> <span class="c"># 한 번에 확! 하기는 좀 귀찮은 작업을 한다</span> <span class="k">raise</span> <span class="ne">SystemExit</span> <span class="c"># 여기서 그냥 1번만 돌고 종료</span> |
종종 첫 데이터는 엄청 단순해서 한 5개나 앞쪽 10개만 돌려보고 싶을 때, [:5]나 [:10]하면 좋겠죠.
그런데, 어떤 건 이터레이션은 되지만 이터레이션 자체가 자원을 많이 먹거나 민폐를 끼치거나
하는 경우가 있습니다. 그 때 뭐 제한하려면 enumerate같은 걸 써서 i >5 면 중단 이러면 되겠지만
역시 너무 순수해 보여서 지루하고 타이핑도 많아서 귀찮습니다. 그래서 제가 보통 쓰는 방법
1 2 3 4 |
<span class="n">cd</span> <span class="o">=</span> <span class="nb">list</span><span class="p">(</span><span class="s">'12345'</span><span class="p">)</span> <span class="k">for</span> <span class="n">url</span> <span class="ow">in</span> <span class="err">엄청많은</span><span class="n">URL</span><span class="p">:</span> <span class="c"># 다른 작업</span> <span class="n">cd</span><span class="o">.</span><span class="n">pop</span><span class="p">()</span> |
왠지 12345 일일이 써 주면 아! 다섯번 하는구나! 하는 필이 확 오고, 에러로 끝내주니까 아주 신납니다. 🙂
혹시 직접 쓰시는 재미있는 방법이 있으면 소개해 주세요~
예전에 list(‘12345’) 비슷한 방법을 썼었는데, 하루는 20번 루프를 돌리려다가 완전 물먹었던 적이 있습니다. 3시간 정도 머리를 쥐어뜯다가 발견한 버그는: list(‘123456789123456789’) orz…
블루님: 커헉. 그런.. 저도 수시로 … ^^;;
세시간!!!
pop을 다른 작업 앞에서 해야 되지 않나요? 아니면 6번 수행 될것같은데;; ㅎ
오오. 그것도 그렇네요. 역시 꿀잠님 예리하신!
for url in __import__(‘itertools’).islice(엄청많은URL, 5):
# 다른 작업
실제로는 ^C^C^C 🙂
사실 input()해서 계속 하고 싶으면 0 아니면 그냥 엔터 치는 것도.. ㅎㅎ;
파이썬 초보라서 range가 먼저 생각이 나는데..
for i in range(5):
for url in urls:
do_something(url)
루비라면,
5.times do
urls.each { |url| do_something(url) }
end
for는 인덴트를 왔다갔다 해야해서 손이 좀 갈 것 같아용.. ^.^
shift를 포함해서 타이핑을 최소화 하는 게 전략!