중복 파일 삭제 스크립트를 돌렸다가 식은땀 흘린 날

이미지
중복 파일 삭제 스크립트를 돌렸다가 식은땀 흘린 날 이 블로그의 중복 파일 자동 삭제 편 과 파일명 일괄 변경 편 을 보면 공통적으로 "DRY_RUN"이라는 안전장치가 들어 있습니다. 실제 삭제나 변경 전에 미리보기부터 하도록 만든 이 습관은, 사실 처음부터 있던 게 아니라 한 번의 아찔한 경험 뒤에 생긴 것입니다. 당시 상황은 이랬습니다. 다운로드 폴더가 오래 방치되어 있어 용량을 확인해보니 중복 파일이 상당히 많았고, "파일 해시값을 비교해서 중복이면 자동으로 지우는" 스크립트를 처음 짜서 바로 실행했습니다. 사건 발생 — 실행 버튼을 누른 직후 처음 짠 코드는 대략 이런 형태였습니다. import hashlib from pathlib import Path from collections import defaultdict folder = Path(r"C:\Users\내이름\Downloads") hash_map = defaultdict(list) def get_hash(filepath): h = hashlib.md5() with open(filepath, "rb") as f: h.update(f.read()) return h.hexdigest() for file in folder.rglob("*"): if file.is_file(): hash_map[get_hash(file)].append(file) # 중복이면 첫 번째만 남기고 나머지 삭제 for files in hash_map.values(): if len(files) > 1: for f in files[1:]: f.unlink() # ← 바로 삭제 실행 print(f"삭제: {f.name}") 실행하자마자 터미널에 "삭제: ......

인터넷 느리다고 느낄 때! 파이썬으로 속도 자동 측정하고 기록하기

인터넷 느리다고 느낄 때! 파이썬으로 속도 자동 측정하고 기록하기 (완성 코드 공개)

파이썬으로 인터넷 속도를 자동으로 측정하고 기록하는 모습


"재택근무 중 오전 10시만 되면 화상회의가 끊긴다", "점심시간 이후에 유독 인터넷이 느린 것 같다", "인터넷 서비스 업체에 느리다고 항의하려는데 근거 자료가 없다"…

인터넷이 느리다는 느낌은 있지만 언제, 얼마나 느린지 정확한 데이터가 없으면 원인을 파악하기 어렵습니다. 파이썬을 한 번만 세팅해두면 다운로드·업로드·핑(Ping) 속도를 자동으로 측정해 날짜·시간과 함께 엑셀에 누적 저장합니다. 작업 스케줄러와 결합하면 하루 종일 자동으로 측정해 느린 시간대를 정확히 파악할 수 있습니다.


1단계: 준비물 설치

파이썬이 설치되어 있어야 합니다. 없다면 python.org에서 최신 버전을 받아 설치하세요. 설치 시 반드시 "Add Python to PATH"에 체크해야 합니다.

인터넷 속도 측정에 필요한 라이브러리를 설치합니다. 터미널(윈도우: CMD 또는 파워셸)을 열고 아래 명령어를 실행하세요:

pip install speedtest-cli pandas openpyxl

speedtest-cli는 Speedtest.net의 공식 서버를 활용해 인터넷 속도를 측정하는 라이브러리입니다. 별도 회원가입이나 API 키 없이 바로 사용할 수 있습니다. pandasopenpyxl은 측정 결과를 엑셀에 누적 저장하는 데 사용합니다.

💡 이 코드로 측정하는 항목: 다운로드 속도(Mbps), 업로드 속도(Mbps), 핑(ms), 측정에 사용된 서버 위치, 측정 일시를 자동으로 수집해 엑셀에 누적 저장합니다.

2단계: 완성 코드

아래 코드를 그대로 복사해서 메모장에 붙여넣고, speed_test.py로 저장하세요. 저장 시 파일 형식은 "모든 파일", 인코딩은 UTF-8로 설정합니다.

import speedtest
import pandas as pd
from pathlib import Path
from datetime import datetime

# ① 설정
OUTPUT_PATH    = r"C:\Users\내이름\Desktop\인터넷속도_이력.xlsx"  # ← 저장 경로
ALERT_DOWNLOAD = 50    # ← 다운로드 속도 경고 기준 (Mbps, 이 값 이하면 경고)
ALERT_PING     = 100   # ← 핑 경고 기준 (ms, 이 값 이상이면 경고)

# ② 속도 측정
print("  📡 인터넷 속도 측정 중... (30초~1분 소요)")
st = speedtest.Speedtest()
st.get_best_server()   # 가장 가까운 서버 자동 선택

download = round(st.download() / 1_000_000, 2)   # bps → Mbps 변환
upload   = round(st.upload()   / 1_000_000, 2)
ping     = round(st.results.ping, 2)
server   = st.results.server.get("name", "알 수 없음")
isp      = st.results.client.get("isp", "알 수 없음")
now      = datetime.now().strftime("%Y-%m-%d %H:%M:%S")

print(f"  ✔ 다운로드: {download} Mbps")
print(f"  ✔ 업로드:   {upload} Mbps")
print(f"  ✔ 핑:       {ping} ms")
print(f"  ✔ 서버:     {server} / ISP: {isp}")

# ③ 경고 판단
warnings = []
if download < ALERT_DOWNLOAD:
    warnings.append(f"다운로드 속도 느림 ({download} Mbps)")
if ping > ALERT_PING:
    warnings.append(f"핑 높음 ({ping} ms)")
warning_msg = " / ".join(warnings) if warnings else "정상"

# ④ 결과 정리
result = {
    "측정일시":         now,
    "다운로드(Mbps)":   download,
    "업로드(Mbps)":     upload,
    "핑(ms)":          ping,
    "서버":             server,
    "ISP":             isp,
    "상태":             warning_msg,
}

# ⑤ 엑셀에 누적 저장
output = Path(OUTPUT_PATH)
df_new = pd.DataFrame([result])

if output.exists():
    df_old = pd.read_excel(output, engine="openpyxl")
    df_all = pd.concat([df_old, df_new], ignore_index=True)
else:
    df_all = df_new

df_all.to_excel(output, index=False)

if warnings:
    print(f"\n  ⚠ 경고: {warning_msg}")
else:
    print(f"\n  ✅ 속도 정상")

print(f"\n✅ 완료! 누적 {len(df_all)}회 기록 → {OUTPUT_PATH}")

3단계: 실행 방법

  1. 코드 ① 설정의 OUTPUT_PATH에 측정 기록을 저장할 엑셀 파일 경로를 입력합니다.
  2. ALERT_DOWNLOAD에 경고 기준 다운로드 속도를, ALERT_PING에 경고 기준 핑 값을 입력합니다.
  3. 터미널에서 아래 명령어로 실행합니다:
python speed_test.py

측정에는 30초~1분 정도 소요됩니다. 정상 실행 시 터미널에 이렇게 출력됩니다:

  📡 인터넷 속도 측정 중... (30초~1분 소요)
  ✔ 다운로드: 487.32 Mbps
  ✔ 업로드:   98.54 Mbps
  ✔ 핑:       12.48 ms
  ✔ 서버:     Seoul / ISP: KT

  ✅ 속도 정상

✅ 완료! 누적 1회 기록 → C:\Users\내이름\Desktop\인터넷속도_이력.xlsx

엑셀 파일을 열면 측정일시, 다운로드·업로드·핑 속도, 서버, ISP, 상태가 열별로 정리됩니다. 실행할 때마다 새 행이 추가되어 이력이 자동으로 누적됩니다.


4단계: 자주 발생하는 오류와 해결법

오류 1: speedtest.ConfigFetchError

인터넷 연결이 불안정하거나 Speedtest 서버에 일시적으로 접근이 안 될 때 발생합니다. 잠시 후 다시 시도하거나, 아래처럼 예외 처리를 추가해 오류 발생 시 자동으로 재시도하도록 할 수 있습니다:

import time
for attempt in range(3):   # 최대 3회 재시도
    try:
        st = speedtest.Speedtest()
        break
    except Exception:
        print(f"  재시도 중... ({attempt+1}/3)")
        time.sleep(10)

오류 2: 측정값이 실제보다 현저히 낮게 나옴

VPN이 켜져 있거나 동시에 대용량 다운로드가 진행 중이면 측정값이 낮게 나옵니다. 측정 전 VPN을 끄고 다른 네트워크 사용을 최소화한 상태에서 실행하세요.

오류 3: ModuleNotFoundError: No module named 'speedtest'

라이브러리 이름이 speedtest가 아닌 speedtest-cli입니다. 설치 명령어를 다시 확인하세요:

python -m pip install speedtest-cli

응용: 30분마다 자동 측정해서 하루 이력 수집하기

윈도우 작업 스케줄러를 활용해 30분마다 자동 측정하면 하루 종일 속도 변화를 기록할 수 있습니다. 작업 스케줄러 설정 방법은 이전 게시글 주식·환율 자동 수집 편을 참고하세요.

또는 코드 안에 반복 실행 루프를 추가할 수도 있습니다. 코드 ② 속도 측정 앞에 아래 루프를 추가하면 30분마다 자동으로 측정합니다:

import time

INTERVAL_MIN = 30   # ← 측정 간격 (분)

while True:
    # 속도 측정 및 저장 코드 실행 (위 완성 코드 전체)
    run_speed_test()   # 함수로 감싸서 호출
    print(f"  ⏱ {INTERVAL_MIN}분 후 다시 측정합니다.\n")
    time.sleep(INTERVAL_MIN * 60)
💡 이전 게시글과 결합하면: 텔레그램 자동 발송 편과 결합하면 속도가 기준 이하로 떨어졌을 때 즉시 알림을 받을 수 있고, 차트 자동 저장 편과 결합하면 누적된 속도 이력을 시간대별 그래프로 시각화할 수 있습니다.

핵심 요약

  • 준비물: Python + speedtest-cli + pandas + openpyxl 설치 (pip install speedtest-cli pandas openpyxl)
  • 설정: OUTPUT_PATH(저장 경로), ALERT_DOWNLOAD·ALERT_PING(경고 기준값) 수정
  • 실행: 터미널에서 python speed_test.py 입력 (측정 소요 시간 30초~1분)
  • 결과: 다운로드·업로드·핑 속도가 측정일시와 함께 엑셀에 누적 저장, 기준 미달 시 경고 표시

이 코드를 응용하면 여러 지점의 네트워크 속도를 동시에 수집하거나, 특정 웹사이트의 응답 속도를 모니터링하는 것도 가능합니다.

이 블로그의 인기 게시물

느려진 구글 크롬 속도 2배 빨라지는 3가지 설정 방법 (2026년 최신 가이드)

카카오톡 용량 줄이기! 대화방 파일 삭제로 스마트폰 용량 확보법 (1분 해결)

업무 속도 3배 빨라지는 윈도우 기본 캡처 도구 단축키 및 200% 활용 꿀팁