- 항상
with블록이 있는 파일을 열면 자동으로 닫힙니다. - 모드
"w"는 기존 파일을 삭제합니다. 추가하려면"a"을 사용하고, 덮어쓰기를 거부하려면"x"를 사용하십시오. - 모든 것을 메모리에 로드하지 않고 대용량 파일을 읽으려면 파일 객체를 반복합니다.
encoding="utf-8"을 명시적으로 전달하고 경로를 구축하려면pathlib를 선호합니다.
로그, 보고서, 구성, 내보내기: 조만간 모든 스크립트가 파일 시스템에 영향을 미칩니다. Python 파일 처리 시작은 간단하지만 몇 가지 세부 사항에 따라 코드가 신뢰할 수 있는지 또는 조용히 데이터를 파괴하는지 여부가 결정됩니다.
이 가이드에서는 안전한 습관에 중점을 두고 텍스트 파일, CSV, JSON, 바이너리 데이터 및 경로를 다룹니다. 임시 폴더의 Python 3.13에서 이러한 예제를 실행했으며 표시된 출력은 해당 실행에서 나온 것입니다.
open() 및 다음을 사용하여 파일 열기
내장된 open() 함수는 파일 객체를 반환합니다. with 블록 내에서 사용하십시오:
with open("notes.txt", "w", encoding="utf-8") as file:
file.write("first line\n")
file.write("second line\n")
print(file.closed)
# True
블록이 끝나면 Python은 파일 내부에 오류가 발생하더라도 파일을 닫습니다. with이 없으면 close()를 직접 호출해야 하며 예외가 발생하면 해당 줄을 건너뛸 수 있습니다. 파일을 닫은 후 사용하면 오류가 발생합니다.
file.read()
# ValueError: I/O operation on closed file.
파일 모드
open()의 두 번째 인수는 수행하려는 작업을 나타냅니다.
| 모드 | 의미 | 파일이 존재하는 경우 | 그렇지 않은 경우 |
|---|---|---|---|
아르 |
읽기(기본값) | 그것을 엽니다 | 오류 |
승 |
쓰기 | 먼저 지운다 | 그것을 창조한다 |
에 |
추가 | 마지막에 추가합니다 | 그것을 창조한다 |
엑스 |
독점 생성 | 오류 | 그것을 창조한다 |
r+ |
읽고 쓰기 | 그것을 엽니다 | 오류 |
"rb" 또는 "wb"과 같이 이진 데이터의 경우 b을 추가합니다. 텍스트가 기본값이며 t와 같이 명시적으로 작성할 수도 있습니다.
쓰기 및 추가
write()은 줄바꿈을 추가하지 않으므로 \n를 직접 포함하세요. 추가하면 이미 있는 내용이 유지됩니다.
with open("notes.txt", "a", encoding="utf-8") as file:
file.write("third line\n")
세 줄을 전혀 경고 없이 하나로 대체한 모드 "w"과 비교해 보세요.
with open("notes.txt", "w", encoding="utf-8") as file:
file.write("replaced\n")
# notes.txt now contains only: replaced
덮어쓰지 말아야 할 경우에는 "x"을 사용하십시오. notes.txt이 이미 존재했기 때문에 테스트에서 FileExistsError가 발생했습니다.
파일 읽기
읽는 방법에는 여러 가지가 있으며 올바른 선택은 파일 크기에 따라 다릅니다.
| 접근 | 반품 | 다음에 가장 적합 |
|---|---|---|
file.read() |
모든 것이 포함된 하나의 문자열 | 작은 파일 |
file.readline() |
다음 줄 | 헤더 읽기 |
file.readlines() |
라인 목록 | 목록으로 필요한 작은 파일 |
파일의 라인에 대해 |
한 번에 한 줄씩 | 모든 크기, 특히 대용량 파일 |
with open("notes.txt", encoding="utf-8") as file:
print(repr(file.read()))
# 'first line\nsecond line\n'
with open("notes.txt", encoding="utf-8") as file:
for line in file:
print(line.strip())
# first line
# second line
# third line
원시 문자열에 유지된 \n 문자를 확인하세요. strip() 제거합니다. 파일 객체는 자신의 위치도 기억하므로 읽기가 중단된 부분부터 계속해서 읽습니다.
with open("notes.txt", encoding="utf-8") as file:
print(file.readline().strip())
print(file.readlines())
# first line
# ['second line\n', 'third line\n']
파일을 반복하는 것은 큰 로그 및 내보내기의 핵심 기술입니다. 한 번에 한 줄씩 읽으므로 수 기가바이트 파일이 메모리에 들어갈 필요가 없습니다.
파일 오류 처리
파일이 없거나 잠겨 있거나 읽을 수 없을 수 있으므로 이에 대한 계획을 세우십시오.
try:
with open("missing.txt", encoding="utf-8") as file:
data = file.read()
except FileNotFoundError as error:
print(error)
# [Errno 2] No such file or directory: 'missing.txt'
| 예외 | 전형적인 원인 |
|---|---|
파일을 찾을 수 없음오류 |
경로가 존재하지 않습니다. |
파일존재오류 |
기존 파일의 모드 x |
권한 오류 |
Windows에서는 허용되지 않거나 잠겨 있습니다. |
IsA디렉토리오류 |
경로는 폴더입니다 |
유니코드디코드오류 |
잘못된 인코딩이 사용되었습니다. |
exists()을 먼저 확인하는 대신 파일을 열고 오류를 잡아보세요. 확인과 열기 사이에 파일이 사라질 수 있기 때문입니다. Python 예외 처리 가이드에서는 이 접근 방식을 다룹니다.
CSV 파일
인용된 값에는 쉼표가 포함될 수 있으므로 CSV 줄을 쉼표로 직접 분할하지 마십시오. 표준 csv 모듈은 이러한 규칙을 처리합니다. DictWriter와 DictReader은 가장 읽기 쉬운 옵션입니다.
import csv
with open("orders.csv", "w", newline="", encoding="utf-8") as file:
writer = csv.DictWriter(file, fieldnames=["id", "customer", "total"])
writer.writeheader()
writer.writerow({"id": 1, "customer": "Asha", "total": 1200})
writer.writerow({"id": 2, "customer": "Ben", "total": 300})
with open("orders.csv", newline="", encoding="utf-8") as file:
rows = list(csv.DictReader(file))
print(rows[0])
print(sum(int(r["total"]) for r in rows))
# {'id': '1', 'customer': 'Asha', 'total': '1200'}
# 1500
두 가지 세부 사항이 중요합니다. Windows에서 빈 행을 방지하려면 문서에서 권장하는 대로 CSV 파일을 열 때 newline=""을 전달하세요. 그리고 모든 값은 문자열, 짝수로 반환되므로 합계에 int()이 필요합니다. 대용량 데이터 작업의 경우 pandas와 같은 라이브러리가 더 적합할 수 있습니다.
JSON 파일
JSON은 구성 및 API 데이터의 일반적인 형식입니다. 이는 Python 사전에 깔끔하게 매핑되고 다음을 나열합니다.
import json
config = {"debug": True, "retries": 3, "hosts": ["a", "b"]}
with open("config.json", "w", encoding="utf-8") as file:
json.dump(config, file, indent=2)
with open("config.json", encoding="utf-8") as file:
print(json.load(file)["retries"])
# 3
이름을 기억하세요. dump과 load는 파일에 작동하고 dumps과 loads는 문자열에 작동합니다. 날짜와 같은 유형은 직접 저장할 수 없으므로 먼저 문자열로 변환해야 합니다.
pathlib를 사용하여 경로 작업
문자열과 함께 경로를 붙이면 운영 체제 전체에서 중단됩니다. 표준 pathlib 모듈은 구분 기호를 처리하고 편리한 단축키를 제공합니다.
from pathlib import Path
path = Path("data") / "reports" / "summary.txt"
path.parent.mkdir(parents=True, exist_ok=True)
path.write_text("all good\n", encoding="utf-8")
print(path.read_text(encoding="utf-8").strip()) # all good
print(path.suffix, path.stem, path.exists()) # .txt summary True
print(sorted(p.name for p in Path(".").glob("*.csv")))
# ['orders.csv']
| 작업 | pathlib |
|---|---|
| 경로 결합 | 경로("a") / "b.txt" |
| 폴더 생성 | path.mkdir(부모=True,exist_ok=True) |
| 전체 텍스트 읽기 또는 쓰기 | read_text(), write_text() |
| 파일 찾기 | glob("*.csv"), rglob("*.py") |
| 파일 삭제 | path.unlink() |
| 현재 스크립트 폴더 가져오기 | Path(__file__).parent |
마지막 것은 일반적인 두통을 해결합니다. 상대 경로는 스크립트가 있는 곳이 아니라 스크립트를 실행한 곳에서 확인되므로 Path(__file__).parent에서 경로를 구축하면 “파일을 찾을 수 없음”으로 인한 놀라움을 피할 수 있습니다.
바이너리 파일
이미지, PDF 및 ZIP 파일은 텍스트가 아닙니다. b로 열고 인코딩 없이 bytes를 읽고 씁니다.
with open("pixel.bin", "wb") as file:
file.write(bytes([255, 0, 128]))
with open("pixel.bin", "rb") as file:
print(file.read())
# b'\xff\x00\x80'
더 안전한 쓰기
중요한 파일을 쓰는 도중에 프로그램이 충돌하면 손상된 결과가 남을 수 있습니다. 일반적인 수정 방법은 먼저 임시 파일에 쓴 다음 해당 위치로 바꾸는 것입니다.
temp = Path("settings.tmp")
temp.write_text("new", encoding="utf-8")
temp.replace("settings.txt")
print(Path("settings.txt").read_text(), temp.exists())
# new False
replace()은 대상을 덮어씁니다. 동일한 파일 시스템에서 이름 바꾸기는 일반적으로 원자적이므로 독자는 절반만 작성된 혼합이 아닌 이전 파일이나 새 파일을 볼 수 있습니다.
팁: 확인하지 않고 사용자 입력에서 직접 파일 경로를 작성하지 마십시오. ../../secrets.txt와 같은 값은 의도한 폴더 외부의 파일에 접근할 수 있습니다. 이를 경로 탐색 취약점이라고 합니다.
실제 예: 로그 요약
이 짧은 스크립트는 여러 가지 아이디어를 하나로 묶습니다. 한 번에 한 줄씩 로그를 읽으므로 크기는 중요하지 않으며 Counter을 사용하여 각 수준을 계산하고 새 파일에 요약을 씁니다.
from collections import Counter
counts = Counter()
with open("app.log", encoding="utf-8") as file:
for line in file:
counts[line.split()[0]] += 1
with open("summary.txt", "w", encoding="utf-8") as out:
for level, total in counts.most_common():
out.write(f"{level}: {total}\n")
# summary.txt
# ERROR: 2
# INFO: 2
# WARN: 1
샘플 로그에는 5줄이 있었습니다. 빈 줄은 깨질 수 있으므로 line.split()[0], 실제 스크립트는 먼저 빈 줄을 건너뛰어야 합니다.
일반적인 실수
"a"을 의미할 때"w"를 사용합니다. 아무것도 쓰지 않더라도 기존 데이터는 열자마자 즉시 사라집니다.- 인코딩 생략. 기본값은 시스템에 따라 다르므로 Linux에서 작동하는 스크립트는 악센트가 있는 텍스트나 이모티콘이 있는 Windows에서는 실패할 수 있습니다.
- 대용량 파일에 대해
read()를 호출합니다. 이렇게 하면 메모리가 소모될 수 있으므로 대신 줄을 반복합니다. - CSV 값에 대한
int()를 잊어버렸습니다."10" + "20"은"1020"를 제공합니다. - CSV의 경우
newline=""를 생략합니다. Windows에서는 예기치 않은 빈 행이 나타날 수 있습니다. - 파일 코드를 테스트하지 않습니다. 테스트가 실제 파일을 건드리지 않도록 pytest의
tmp_path고정 장치를 사용하세요. pytest 튜토리얼을 참조하세요.
마무리
여기에 있는 거의 모든 것을 다루는 몇 가지 습관이 있습니다. with을 사용하고, 인코딩을 설정하고, "w"에 대해 다시 생각하고, csv, json 및 pathlib가 어려운 부분을 수행하도록 합니다. 연습하려면 CSV를 읽고 하나의 열을 합산하고 JSON 요약을 새 폴더에 저장하는 작은 스크립트를 작성하세요.
자주 묻는 질문
Python에서 파일을 한 줄씩 읽으려면 어떻게 해야 합니까?
with 블록에서 열고 파일 객체를 반복합니다. 이는 한 번에 한 줄씩 읽으므로 매우 큰 파일에도 잘 작동합니다.
w와 모드의 차이점은 무엇입니까?
w 모드는 파일이 열리자마자 기존 내용을 모두 지웁니다. 모드 a는 기존 콘텐츠를 유지하고 파일 끝에 새 데이터를 추가합니다.
파일을 열 때 왜 with를 사용해야 합니까?
with 문은 오류가 발생하더라도 블록이 끝나면 자동으로 파일을 닫습니다. 이는 누출을 방지하고 데이터가 기록되도록 하는 데 도움이 됩니다.
Python에 파일이 있는지 어떻게 확인합니까?
pathlib에서 Path(“name.txt”).exists()를 사용하세요. 곧바로 열 계획이라면 먼저 확인하는 것보다 FileNotFoundError를 잡는 것이 일반적으로 더 안정적입니다.
Windows에서 내 CSV에 빈 줄이 있는 이유는 무엇입니까?
아마도 newline=”” 없이 파일을 열었을 것입니다. csv 모듈은 줄 끝 자체를 관리하므로 추가 빈 행을 피하기 위해 해당 인수를 전달합니다.
계속 학습하세요
테스트, WordPress 또는 SEO에 도움이 필요하십니까?
우리는 팀이 더 나은 소프트웨어를 출시하고 사이트를 성장시킬 수 있도록 돕습니다. 현재 진행 중인 작업을 알려주시면 명확한 다음 단계를 제안해 드리겠습니다.
추가 가이드 테스트, AI 및 최신 개발
이 기사가 마음에 드셨나요? 주제를 선택하고 최신 튜토리얼로 바로 이동하세요.
AI 환각 설명: 언어 모델이 사물을 구성하는 이유와 이를 줄이는 방법
AI 환각은 그것이 무엇인지, 언어 모델이 환각을 생성하는 이유, 일반적인 유형, 접지 및 프롬프트를 통해 환각을 줄이는 방법, 그리고 우리가 실행한 간단한 점검에 대해 설명했습니다.
기사 읽기 →DevOps환경 변수 설명: .env 파일, 비밀 및 구성이 올바르게 완료되었습니다.
우리가 실행한 Python 예제를 통해 설명된 환경 변수: 읽기 및 설정, 모든 값이 문자열인 이유, .env 파일, 프로세스 상속, 비밀 및 유효성 검사.
기사 읽기 →소프트웨어 개발API 속도 제한 설명: 알고리즘, 헤더 및 429 오류 처리
우리가 실행한 시뮬레이션을 통해 설명된 API 속도 제한: 토큰 버킷, 고정 창, 슬라이딩 창, 429 응답, 속도 제한 헤더, 백오프를 사용한 재시도 및 테스트 제한.
기사 읽기 →테스트 자동화Python에서 조롱: unittest.mock, 패치 및 테스트를 거짓말로 만드는 실수
Unittest.mock을 사용하여 Python에서 모의, 테스트됨: 모의 및 return_value, 부작용, 이름이 사용되는 패치, 사양 및 자동 사양, 모의 날짜 및 일반적인 실수.
기사 읽기 →소프트웨어 테스트코드 커버리지 설명: 회선 커버리지와 분기 커버리지 및 100%의 실제 의미
실제 Coverage.py 실행을 통해 설명되는 코드 적용 범위: 라인, 분기 및 조건 적용 범위, 보고서 읽기, 100% 적용 범위가 여전히 버그를 놓칠 수 있는 이유 및 합리적인 대상.
기사 읽기 →데이터베이스 및 SQLSQL의 DELETE vs TRUNCATE vs DROP: 차이점, 롤백 및 사용 시기
테스트된 SQL을 통해 DELETE 대 TRUNCATE 대 DROP에 대해 설명합니다. 각각의 제거, 롤백, 트리거, ID 재설정, 속도 및 PostgreSQL, MySQL, SQL Server 및 SQLite의 차이점.
기사 읽기 →데이터베이스 및 SQLSQL 뷰 설명: 예제를 통해 함정 생성, 사용 및 방지
우리가 실행한 쿼리로 설명된 SQL 뷰: 뷰 생성, 실시간 결과, 열 숨기기, 성능, 업데이트 가능하고 구체화된 뷰, 손상된 종속성 및 모범 사례.
기사 읽기 →소프트웨어 개발TypeScript 인터페이스와 유형: 실제 차이점, 컴파일러로 테스트
TypeScript 인터페이스 대 유형, 실제 컴파일러로 확인: 둘 다 할 수 있는 것, 하나만 할 수 있는 것, 선언 병합, 확장 대 교차점 및 따라야 할 간단한 규칙.
기사 읽기 →소프트웨어 개발Python *args 및 **kwargs 설명: 명확한 예가 포함된 유연한 함수
Python *args 및 **kwargs는 우리가 실행한 코드(패킹 및 언패킹, 매개변수 순서, 키워드 전용 및 위치 전용 인수, 데코레이터 및 일반적인 오류)를 설명했습니다.
기사 읽기 →소프트웨어 개발Python Lambda 함수: 구문, 실제 사용 및 사용하지 말아야 할 경우
Python 람다 함수는 구문, 키를 사용한 정렬, 맵 및 필터, 클로저, 후기 바인딩 트랩, 일반 def가 더 나은 선택인 경우 등 우리가 실행한 코드로 설명되었습니다.
기사 읽기 →인공지능AI 에이전트란 무엇입니까? 작동 방식, 간단한 에이전트 루프를 사용하여 실행할 수 있음
AI 에이전트란 무엇입니까? 우리가 실행한 작은 Python 루프, 실제 위험 및 간단한 챗봇이 더 나은 선택일 때 에이전트 루프, 도구, 메모리 및 가드레일에 대한 일반 가이드입니다.
기사 읽기 →DevOps모니터링과 관찰 가능성: 로그, 지표, 추적을 통한 실제 차이점
모니터링과 관찰 가능성 설명: 알려진 오류와 알려지지 않은 오류, 로그, 지표 및 추적, 결제 사건 안내, 골든 신호, OpenTelemetry 및 유용한 경고.
기사 읽기 →DevOpsDocker 볼륨과 바인딩 마운트: 컨테이너 데이터를 올바른 방식으로 유지
Docker 볼륨과 바인드 마운트 설명: 컨테이너 데이터가 사라지는 이유, 명명된 볼륨, 바인드 마운트, tmpfs, Compose 예제, 백업, 권한 및 각 사용 시기.
기사 읽기 →테스트 자동화TDD와 BDD: 주요 차이점, 두 가지 방식으로 구축된 하나의 기능 및 각 사용 시기
TDD와 BDD는 두 가지 방식으로 구축된 하나의 할인 기능, 즉 우리가 실행한 코드를 사용한 적록 리팩토링, 주어진 시점 시나리오, 도구, 장단점 및 각 사용 시기를 설명합니다.
기사 읽기 →소프트웨어 테스트UAT(사용자 승인 테스트): 프로세스, 체크리스트 및 실제 사례
사용자 승인 테스트는 누가 실행하는지, QA와 어떻게 다른지, 7단계 프로세스, UAT 테스트 사례 템플릿, 체크리스트, 승인 기준 및 일반적인 실수에 대해 설명했습니다.
기사 읽기 →데이터베이스 및 SQLSQL NULL 값 설명: IS NULL, COALESCE, NULLIF 및 피해야 할 함정
우리가 실행한 쿼리를 통해 설명된 SQL NULL 값: 3개 값 논리, IS NULL, COALESCE, NULLIF, 집계, 조인 및 정렬이 NULL을 처리하는 방법 및 조용히 발생하는 버그.
기사 읽기 →데이터베이스 및 SQLSQL CASE WHEN 문: 구문, 실제 예 및 일반적인 실수
우리가 실행한 쿼리로 설명된 SQL CASE: 단순 및 검색 양식, 조건 순서, SUM이 있는 피벗, COUNT 트릭, 사용자 정의 정렬, 업데이트 및 피해야 할 NULL 트랩.
기사 읽기 →소프트웨어 개발JWT란 무엇입니까? 실제 예제로 설명되는 JSON 웹 토큰
JWT란 무엇입니까? JSON 웹 토큰은 세 부분, 즉 우리가 실행한 코드에서 구축 및 변조된 토큰, JWT 대 세션, 저장소, 새로 고침 토큰 및 보안 실수를 설명했습니다.
기사 읽기 →소프트웨어 개발JavaScript 이벤트 루프 설명: 예제가 포함된 호출 스택, 마이크로태스크 및 타이머
호출 스택, 작업 및 마이크로태스크 대기열, setTimeout 0이 즉시 실행되지 않는 이유, 차단, 기아 및 인터뷰 퀴즈 등 우리가 실행한 코드로 JavaScript 이벤트 루프를 설명했습니다.
기사 읽기 →소프트웨어 개발Python 생성기 및 수율 설명: 실제 예제로 메모리 절약
Python 생성기와 항복은 우리가 실행한 코드로 설명됩니다. 일시 중지 및 재개 방법, 측정된 메모리 절약, 파이프라인, 무한 시퀀스, 항복, 전송 및 공통 트랩.
기사 읽기 →인공지능임베딩이란 무엇입니까? 벡터와 코사인 유사성을 간단하게 설명
임베딩이란 무엇입니까? 벡터, 코사인 유사성 및 의미론적 검색에 대한 일반 언어 가이드로, 우리가 실행한 작은 예, 일반적인 용도, 모델 선택 및 알려진 한계를 제공합니다.
기사 읽기 →DevOps블루-그린 배포와 카나리아 배포: 차이점, 장단점 및 선택 방법
블루-그린 배포와 카나리아 배포에 대한 설명: 각각의 작동 방식, 비용, 위험 및 롤백, 테스트한 안정적인 사용자 버킷팅, 데이터베이스 마이그레이션, 롤링 업데이트 및 선택 방법.
기사 읽기 →테스트 자동화불안정한 테스트: 원인과 해결 방법
우리가 실행한 데모를 통해 불안정한 테스트에 대해 설명했습니다. 주요 원인, 확인 및 진단 방법, 시기, 공유 상태 및 날짜, 격리 프로세스에 대한 적절한 수정 사항.
기사 읽기 →소프트웨어 테스트부하 테스트와 스트레스 테스트 비교: 차이점, 측정항목 및 k6 예
부하 테스트와 스트레스 테스트 비교 설명: 각각의 증명, 스파이크 및 흡수 테스트, 중요한 측정항목, 평균이 잘못된 이유, k6 예 및 테스트 계획 방법.
기사 읽기 →소프트웨어 테스트테스트 케이스와 테스트 시나리오: 주요 차이점, 예 및 각각의 사용 시기
테스트 케이스와 테스트 시나리오 설명: 명확한 정의, 병렬 테이블, 시나리오에서 케이스로 가져온 하나의 비밀번호 재설정 기능, 템플릿 및 각 사용 시기.
기사 읽기 →데이터베이스 및 SQLSQL 쿼리 최적화: 타이밍에 따라 실행 계획을 읽고 느린 쿼리를 수정합니다.
백만 개의 행에서 테스트된 SQL 쿼리 최적화: 실행 계획 읽기, 올바른 인덱스 추가, 분할할 수 없는 필터 수정, 복합 인덱스 및 키 세트 페이지 매김 사용.
기사 읽기 →데이터베이스 및 SQLSQL UNION 대 UNION ALL: 테스트된 차이점, 예 및 성능
SQL UNION과 UNION ALL은 우리가 실행한 쿼리(중복, 둘 다 따르는 규칙, 실제 데이터 버그, 측정된 성능, INTERSECT 및 EXCEPT, 각각의 사용 시기)를 설명합니다.
기사 읽기 →소프트웨어 개발JavaScript Fetch API 튜토리얼: GET, POST, 오류 처리 및 시간 초과
로컬 서버에 대해 테스트된 JavaScript Fetch API 튜토리얼: GET 및 POST, 404가 발생하지 않는 이유, 재사용 가능한 도우미, 쿼리 문자열, 시간 초과, CORS 및 일반적인 실수.
기사 읽기 →소프트웨어 개발Python 파일 처리: 읽기, 쓰기, CSV, JSON 및 pathlib 예제 포함
우리가 실행한 코드로 설명된 Python 파일 처리: 개방형 모드, 대용량 파일 읽기, CSV, JSON, pathlib, 바이너리 파일, 안전한 쓰기, 오류 처리 및 일반적인 실수.
기사 읽기 →소프트웨어 개발Git merge vs rebase: 차이점, 예제, 언제 무엇을 쓸까
Git merge vs rebase를 실제 로그 출력, 비교표, rebase의 황금률, 안전한 팀 워크플로로 설명합니다.
기사 읽기 →소프트웨어 개발파이썬 리스트 컴프리헨션: 문법, 예제, 피해야 할 때
파이썬 리스트 컴프리헨션 설명: 문법, 필터링, if-else, 중첩 반복문, 실제 측정 시간, 그리고 일반 for 반복문이 더 나은 경우.
기사 읽기 →데이터베이스 및 SQL예제로 쉽게 배우는 SQL JOIN (Inner, Left, Right, Full)
샘플 테이블과 쿼리로 SQL JOIN을 단계별로 이해하세요. INNER, LEFT, RIGHT, FULL, CROSS, SELF와 흔한 실수, 성능 팁까지 정리했습니다.
기사 읽기 →