[Linux]부트캠프 - 파일 및 폴더 생성
파일 및 폴더 생성
[Noitce] 고쳐야하거나 틀린 것이 있으면 말씀해주세요!
비틀즈의 ‘Yesterday’ 아시나요? 정말 유명한 곡인데요. 이 곡의 가사가 저장되어 있는 텍스트 파일을 읽어 가사에 사용되고 있는 단어들의 목록을 알파벳 순서로 출력하고, 각 단어들이 몇 개씩 사용되고 있는지 단어별 개수를 출력하는 프로그램을 작성해봅시다.
텍스트 파일과 출력 예시:
과정을 생각해보면 이정도로 정리해 볼 수 있다.
yesterday.txt
파일을 읽어온다.소문자
로 변환하여 단어
로 나눠준다.카운트
를 계산이제 코드를 작성해서 프로그램을 구현해보자.
f = open('yesterday.txt', 'r') # 읽기모드로 텍스트 파일을 불러온다.
yesterday = f.readlines() # readlines() 메소드는 텍스트를 행 별로 리스트에 저장
# yesterday2 = f.read() # read() 메소드를 사용하면 문자열로 들어온다. 바로 스플릿을 할 수도 있다.
f.close() # 파일을 닫아준다.
words = [] # 단어 크기로 나눠진 문자들을 담아줄 리스틀 생성한다.
for line in yesterday:
line = line.split()
for w in line:
words.append(w.lower()) # 소문자로변경하여 words에 append
# 반복문을 사용해 yesterday 리스트를 .split() 메소드를 사용해 단어로 나눠준다.
# 그리고 다시 이중 반복문을 이용해서 lower()메소드를 사용해 단어를 소문자로 바꿔주고 words에 append해준다.
wordL = list(set(words))
# 중복되는 단어들을 집합으로 만들어 요소 하나씩만 남게한 다음 다시 리스트로 만든다.
wordL.sort()
# 그 리스트를 알파벳 오름차순으로 정렬해준다.
wordDict = dict()
# 단어와 단어의 개수를 담기 위한 딕셔너리를 생성
for w in wordL:
wordDict[w] = words.count(w)
# 단어의 중복을 없앤 리스트를 반복문을 이용해 딕셔너리의 key값에 넣어준다.
# 단어의 중복이 있는 words 리스트에서 .count() 메소드를 사용해 단어의 개수를 카운트하고 value값에 저장해준다.
for w in wordDict.items():
print(f"'{w[0]}' : {w[1]}")
# 반복문을 사용해 딕셔너리의 key값(단어)과 value값(개수)를 출력
'a' : 3
'all' : 1
'an' : 2
'as' : 1
'away' : 3
'be' : 1
'believe' : 3
'came' : 1
'don't' : 2
'easy' : 2
'far' : 1
'for' : 2
'game' : 2
'go,' : 2
'had' : 2
'half' : 1
'hanging' : 1
'here' : 1
'hide' : 2
'i' : 12
'i'm' : 1
'in' : 3
'it' : 1
'know' : 2
'long' : 2
'looks' : 1
'love' : 2
'man' : 1
'me' : 1
'my' : 1
'need' : 2
'not' : 1
'now' : 5
'oh,' : 4
'over' : 1
'place' : 2
'play' : 2
'said' : 2
'say' : 2
'seemed' : 1
'shadow' : 1
'she' : 4
'so' : 1
'something' : 2
'stay' : 1
'such' : 2
'suddenly' : 2
'the' : 1
'there's' : 1
'they're' : 1
'though' : 1
'to' : 8
'troubles' : 1
'used' : 1
'was' : 2
'why' : 2
'wouldn't' : 2
'wrong' : 2
'yesterday' : 9
단어 별로 개수가 정렬되어 잘 출력된 것을 확인할 수 있다. 하지만 oh 뒤에 ‘,’가 있는 것을 볼 수 있다.
저 문제들을 처리하면서 동시에 코드를 줄여볼 수도 있다.
with open('yesterday.txt', 'r') as f:
yesterday = f.read().lower().replace(',', '')
yesterday = yesterday.split()
wordDict = {}
words = sorted(list(set(yesterday)))
# with 함수를 사용하면 close()가 자동으로 된다.
# .read()메소드는 리스트가 아닌 문자열로 텍스트 파일을 추출해온다.
# lower로 문자열들을 소문자로 변환
# replace로 ,를 공백으로 처리
# split을 활용해 각 단어를 list로 처리
# wordDict라는 딕셔너리를 생성
# yesterday 리스트를 집합으로 변환시켜 중복 제거 후 리스트로 변환하고 정렬시켜 words에 저장
for w in words:
wordDict[w] = yesterday.count(w)
# 반복문을 활용해 words의 단어를 딕셔너리 key값에 저장해주고 .count()를 이용해 해당 key값의 개수를 value값에 저장.
for w in wordDict.items():
print(f"'{w[0]}' : {w[1]}")
# wordDict의 값들을 출력
'a' : 3
'all' : 1
'an' : 2
'as' : 1
'away' : 3
'be' : 1
'believe' : 3
'came' : 1
'don't' : 2
'easy' : 2
'far' : 1
'for' : 2
'game' : 2
'go' : 2
'had' : 2
'half' : 1
'hanging' : 1
'here' : 1
'hide' : 2
'i' : 12
'i'm' : 1
'in' : 3
'it' : 1
'know' : 2
'long' : 2
'looks' : 1
'love' : 2
'man' : 1
'me' : 1
'my' : 1
'need' : 2
'not' : 1
'now' : 5
'oh' : 4
'over' : 1
'place' : 2
'play' : 2
'said' : 2
'say' : 2
'seemed' : 1
'shadow' : 1
'she' : 4
'so' : 1
'something' : 2
'stay' : 1
'such' : 2
'suddenly' : 2
'the' : 1
'there's' : 1
'they're' : 1
'though' : 1
'to' : 8
'troubles' : 1
'used' : 1
'was' : 2
'why' : 2
'wouldn't' : 2
'wrong' : 2
'yesterday' : 9
이렇게 잘 출력될 것이다.
한 줄에 두 개의 숫자가 저장되어 있는 파일을 읽어와 한 줄의 두 숫자를 더한 후 연산 결과를 파일로 내보내는 프로그램을 작성해보자.
파일을 읽어오고 파일에 쓰고, 숫자에 대해 연산하는 기능은 함수 sum()
을 정의하여 사용한다.
sum(inputfile 객체, 저장파일명)
메인에서는 해당 함수를 호출해서 수행
텍스트 파일과 출력 예시:
과정을 간략히 생각해보자.
이제 차근차근 풀어보자!
with open('list_num.txt', 'r') as f:
data = f.readlines()
# 'list_num.txt' 파일을 읽기 모드로 불러온다.
# with문을 사용해 간단하게 코드를 작성함과 동시에 close()처리를 따로 하지 않아도 된다.
# 내용을 전부 읽어서 행별로 data 리스트에 담아준다.
with open('list_calcul.txt', 'w') as f:
for d in data:
if d.replace('\n', '') != '':
value1, value2= d.split()
result = int(value1) + int(value2)
f.write(f'{value1} + {value2} = {result}\n')
else:
continue
# with문을 사용해 쓰기 모드('w')로 'list_calcul.txt' 파일을 생성
# 반복문을 사용해 data리스트에 있는 요소들에 대한 수행문을 작성한다.
# 해당 텍스트파일을 보면 두 줄에 한 줄씩 빈 줄이있다.
# 만약 요소들의 줄바꿈을 공백으로 바꿨을때, 요소가 공백이 아니라면 d를 split()으로 나눠 value1과 2에 언패킹을 해준다.
# 그리고 value1과 value2에 저장된 값을 정수형으로 변환시켜주고 result에 합을 저장해준다.
# .write()메소드를 사용해 출력 예시처럼 입력해준다.
해당 코드를 실행시키면 ‘list_calcul.txt’ 파일이 생성되었을 것이고, 내용을 확인하면
50 + -15 = 35
61 + 33 = 94
436 + -666 = -230
63 + 16 = 79
95 + 55 = 150
-35 + -36 = -71
-3 + 32 = 29
-62 + 100 = 38
이렇게 잘 작성되어 있을 것이다.
하지만, 이 과정을 함수화 시키고 main에서만 작동하게 하는 과정이 남아있다.
def sum(input_file, output_file):
with open(input_file, 'r') as f:
data = f.readlines()
with open(output_file, 'w') as f:
for d in data:
if d.replace('\n', '') != '':
value1, value2= d.split()
result = int(value1) + int(value2)
f.write(f'{value1} + {value2} = {result}\n')
else:
continue
# 위 과정과 코드는 같다.
# 다만 def로 sum 함수를 정의해줘야한다.
# 그리고 직접 with문에 직접적으로 적어주었던 파일명을 각각 input_file, output_file로 매개변수로 변경해준다.
if __name__ == '__main__':
# main : 프로그램 실행 코드
sum('list_num.txt', 'list_calcul.txt')
# 마지막으로 main에서 해당 함수를 호출해서 수행하고, sum함수를 실행해보자!
회원 명단을 입력받아 저장하거나, 회원명단파일을 열어 저장되어 있는 회원 명단을 출력하는 프로그램을 작성해보자.
회원명단을 입력받아 파일로 저장하는 함수를 작성(input_member(input_file명))
)
사용자가 입력한 파일을 열어서 출력해주는 함수 작성(output_member(output_file명)
)
메인에서는 실행결과와 같이 선택한 작업에 해당하는 함수를 호출하여 수행
출력 예시:
(1) 회원명단을 입력받아 파일로 저장하는 함수 작성
def input_member(input_file):
with open(input_file, 'w', encoding='utf-8') as f:
while True:
member = input('멤버를 입력하세요. (종료는 q) : ')
if member == 'q':
break
else:
f.write(member+'\n')
# 회원명단을 입력받아 저장하는 파일의 매개변수로 input_file을 적어준다.
# with문을 사용해 저장할 파일을 생성해주고 한글이 들어가기 때문에 인코딩을 utf-8로 지정.
# 명단입력은 q키를 누를때까지 계속 작업되기 때문에 while문을 사용한다.
# 입력받는 member가 q일 때 break를 이용해 해당 프로그램을 종료시켜준다.
# 그 외에는 member에 받은 회원명단을 input_file에 적어주는 .write()메소드를 적용한다.
(2) 사용자가 입력한 파일을 열어서 출력해주는 함수 작성
def output_member(output_file):
with open(output_file, 'r', encoding='utf-8') as f:
print(f.read())
# 읽기 모드로 불러올 파일의 객체명을 output_file로 작성
# 똑같이 한글을 사용하기 때문에 utf-8 인코딩 적용
# .read() 메소드를 사용해 텍스트의 내용을 문자열로 전부 읽어준다.
(3) 메인에서는 실행결과와 같이 선택한 작업에 해당하는 함수를 호출하여 수행
while True:
sel = input('저장 1, 출력 2, 종료 q : ')
if sel == '1':
input_file = input('멤버 명단을 저장할 파일명을 입력하세요. : ')
input_member(input_file)
print('저장되었습니다.')
elif sel == '2':
output_file = input('멤버 명단이 저장된 파일명을 입력하세요. : ')
output_member(output_file)
elif sel == 'q':
break
else:
print('잘못 입력하셨습니다.')
# q를 입력하기 전 까지 무한 반복이니까 while문을 사용
# input을 사용해 사용자가 '저장 1, 출력 2, 종료 q' 중에서 선택하게 만든다.
# sel는 select(선택)이라는 뜻의 변수
# 만약 1을 입력하면 파일명을 정할 수 있다.
# 그리고 회원명을 적을 수 있는 input_member 함수가 실행되며, 입력한 파일명의 파일에 저장된다.
# 만약 2를 입력하면 이전에 이미 저장되어있는 회원명단 파일명을 적어야 한다.
# 파일명을 제대로 적으면, 회원들의 이름을 전부 출력해준다.
# 만약 q를 입력하면 프로그램이 종료된다.
한번 실행해서 출력결과를 확인해보자.
저장 1, 출력 2, 종료 q : 1
멤버 명단을 저장할 파일명을 입력하세요. : goodjeon.txt
멤버를 입력하세요. (종료는 q) : 전동준
멤버를 입력하세요. (종료는 q) : 손흥민
멤버를 입력하세요. (종료는 q) : 박지성
멤버를 입력하세요. (종료는 q) : 차범근
멤버를 입력하세요. (종료는 q) : 귀도 반 로섬
멤버를 입력하세요. (종료는 q) : 스티븐 잡스
멤버를 입력하세요. (종료는 q) : q
저장되었습니다.
저장 1, 출력 2, 종료 q : 2
멤버 명단이 저장된 파일명을 입력하세요. : goodjeon.txt
전동준
손흥민
박지성
차범근
귀도 반 로섬
스티븐 잡스
저장 1, 출력 2, 종료 q : q
Process finished with exit code 0
텍스트파일도 확인해 보자.
파일 및 폴더 생성
파일 시스템 탐색
도움말(man -> manual)
명령어 기초
유닉스(Unix)
특정 코드 지연 실행 - DispatchQueue.main.asyncAfter(deadline: )
Naming Conventions
안드로이드 폰과 맥북에어 M1 USB 테더링 성공
Simulator 풀 스크린 사용 방법
10807번 - 개수 세기
프로그래머스 Lv.1 풀이 코드 모음
프로그래머스 Lv.1 풀이 코드 모음
11047번 - 동전 0
11659번 - 구간 합 구하기 4
14888번 - 연산자 끼워넣기
9184번 - 신나는 함수 실행
24416번 - 알고리즘 수업 - 피보나치 수 1
2580번 - 스도쿠
9663번 - N-Queen
15652번 - N과 M (4)
15651번 - N과 M (3)
15650번 - N과 M (2)
25305번 - 커트라인
25304번 - 영수증
3003번 - 킹, 퀸, 룩, 비숍, 나이트, 폰
15649번 - N과 M (1)
2004번 - 조합 0의 개수
1676번 - 팩토리얼 0의 개수
9375번 - 패션왕 신해빈
1010번 - 다리 놓기
11051번 - 이항 계수 2
11050번 - 이항 계수 1
3036번 - 링
2981번 - 검문
1934번 - 최소공배수
2609번 - 최대공약수와 최소공배수
1037번 - 약수
5086번 - 배수와 약수
1358번 - 하키
1004번 - 어린 왕자
1002번 - 터렛
3053번 - 택시 기하학
2477번 - 참외밭
4153번 - 직각삼각형
3009번 - 네 번째 점
1085번 - 직사각형에서 탈출
11478번 - 서로 다른 부분 문자열의 개수
1269번 - 대칭 차집합
1764번 - 듣보잡
10816번 - 숫자 카드 2
1620번 - 나는야 포켓몬 마스터 이다솜
14425번 - 문자열 집합
10815번 - 숫자 카드
18870번 - 좌표 압축
10814번 - 나이순 정렬
1181번 - 단어 정렬
11651번 - 좌표 정렬하기 2
11650번 - 좌표 정렬하기
1427번 - 소트인사이드
2108번 - 통계학
10989번 - 수 정렬하기 3
2751번 - 수 정렬하기 2
2750번 - 수 정렬하기
22.06.25 ~ 27 부산 먹부림 기록
1436번 - 영화감독 숌
1018번 - 체스판 다시 칠하기
7568번 - 덩치
2231번 - 분해합
2798번 - 블랙잭
11729번 - 하노이 탑 이동 순서
2447번 - 별 찍기 - 10
17478번 - 재귀함수가 뭔가요?
10870번 - 피보나치 수 5
10872번 - 팩토리얼
9020번 - 골드바흐의 추측
4948번 - 베르트랑 공준
1929번 - 소수 구하기
11653번 - 소인수분해
2581번 - 소수
1978번 - 소수 찾기
10757번 - 큰 수 A+B
2839번 - 설탕 배달
2775번 - 부녀회장이 될테야
10250번 - ACM 호텔
2869번 - 달팽이는 올라가고 싶다
1193번 - 분수찾기
2292번 - 벌집
1712번 - 손익분기점
1316번 - 그룹 단어 체커
2941번 - 크로아티아 알파벳
5622번 - 다이얼
2908번 - 상수
1152번 - 단어의 개수
1157번 - 단어 공부
2675번 - 문자열 반복
10809번 - 알파벳 찾기
11720번 - 숫자의 합
11654번 - 아스키 코드
1065번 - 한수
4673번 - 셀프 넘버
15596번 - 정수 N개의 합
4344번 - 평균은 넘겠지
8958번 - OX퀴즈
25083번 - 새싹
Spark Bigdata Pipeline
Spark 3일차
Spark 2일차
1546번 - 평균
Spark 1일차
Hadoop🐘
3052번 - 나머지
2577번 - 숫자의 개수
2562번 - 최댓값
10818번 - 최소, 최대
Linux
MongoDB 조회 문제
MongoDB
1110번 - 더하기 사이클
10951번 - A+B - 4
Oracle 3️⃣
ORACLE 연습용 문제 만들기 숙제
10952번 - A+B - 5
Oracle 2️⃣
2480번 - 주사위 세개
Oracle Day1️⃣
Tensorflow
Big Data
2525번 - 오븐 시계
10871번 - X보다 작은 수
2439번 - 별 찍기 - 2
2438번 - 별 찍기 - 1
11022번 - A+B - 8
11021번 - A+B - 7
2742번 - 기찍 N
2741번 - N 찍기
15552번 - 빠른 A+B
8393번 - 합
10950번 - A+B - 3
9️⃣ 2739번 - 구구단
2884번 - 알람 시계
14681번 - 사분면 고르기
⛏크롤링(Crawling)
2753번 - 윤년
Django 복습 4️⃣
Django 복습 3️⃣
💯 9498번 - 시험 성적
1330번 - 두 수 비교하기
✖ 2588번 - 곱셈
➗ 10430번 - 나머지
Django 복습 2️⃣
Django 복습 1
MySQL 복습!
⁉10926번 - ??!
🆎1008번 - A/B
👩🦲 18108번 - 1998년생인 내가 태국에서는 2541년생?!
[Noitce] 고쳐야하거나 틀린 것이 있으면 말씀해주세요!
[Noitce] 고쳐야하거나 틀린 것이 있으면 말씀해주세요!
[Noitce] 고쳐야하거나 틀린 것이 있으면 말씀해주세요!
[Noitce] 고쳐야하거나 틀린 것이 있으면 말씀해주세요!
[Noitce] 고쳐야하거나 틀린 것이 있으면 말씀해주세요!
[Noitce] 고쳐야하거나 틀린 것이 있으면 말씀해주세요!
[Noitce] 고쳐야하거나 틀린 것이 있으면 말씀해주세요!
[Noitce] 고쳐야하거나 틀린 것이 있으면 말씀해주세요!
[Noitce] 고쳐야하거나 틀린 것이 있으면 말씀해주세요!
[Noitce] 고쳐야하거나 틀린 것이 있으면 말씀해주세요!
[Noitce] 고쳐야하거나 틀린 것이 있으면 말씀해주세요!
[Noitce] 고쳐야하거나 틀린 것이 있으면 말씀해주세요!
[Noitce] 고쳐야하거나 틀린 것이 있으면 말씀해주세요!
[Noitce] 고쳐야하거나 틀린 것이 있으면 말씀해주세요!
🎈✨경 축✨🎈
[Noitce] 고쳐야하거나 틀린 것이 있으면 말씀해주세요!
[Noitce] 고쳐야하거나 틀린 것이 있으면 말씀해주세요!
[Noitce] 고쳐야하거나 틀린 것이 있으면 말씀해주세요!
선형 자료구조(1일차에 이어서)
🆎10998번 - A×B
🆎1001번 - A-B
🆎1000번 - A+B
[Noitce] 고쳐야하거나 틀린 것이 있으면 말씀해주세요!
[Noitce] 고쳐야하거나 틀린 것이 있으면 말씀해주세요!
[Noitce] 고쳐야하거나 틀린 것이 있으면 말씀해주세요!
[Noitce] 고쳐야하거나 틀린 것이 있으면 말씀해주세요!
[Noitce] 고쳐야하거나 틀린 것이 있으면 말씀해주세요!
🐶10172번 - 개
[Noitce] 고쳐야하거나 틀린 것이 있으면 말씀해주세요!
[Noitce] 고쳐야하거나 틀린 것이 있으면 말씀해주세요!
[Noitce] 고쳐야하거나 틀린 것이 있으면 말씀해주세요!
🐱10171번 - 고양이
[해당 포스트는 유튜버 나동빈님의 영상을 참고했습니다.]
❤10718번 - We love kriii
🖐2557번 - Hello World
Today I Learned(TIL)📌 (2021.12.31)
Today I Learned(TIL)📌 (2021.12.30)
[Noitce] 고쳐야하거나 틀린 것이 있으면 말씀해주세요!
[Noitce] 고쳐야하거나 틀린 것이 있으면 말씀해주세요!
[Noitce] 고쳐야하거나 틀린 것이 있으면 말씀해주세요!
[Noitce] 고쳐야하거나 틀린 것이 있으면 말씀해주세요!
[Noitce] 고쳐야하거나 틀린 것이 있으면 말씀해주세요!
[Noitce] 고쳐야하거나 틀린 것이 있으면 말씀해주세요!
[Noitce] 고쳐야하거나 틀린 것이 있으면 말씀해주세요!
[Noitce] 고쳐야하거나 틀린 것이 있으면 말씀해주세요!
[Noitce] 고쳐야하거나 틀린 것이 있으면 말씀해주세요!
[Noitce] 고쳐야하거나 틀린 것이 있으면 말씀해주세요!
[Noitce] 고쳐야하거나 틀린 것이 있으면 말씀해주세요!
[Noitce] 고쳐야하거나 틀린 것이 있으면 말씀해주세요!
[Noitce] 고쳐야하거나 틀린 것이 있으면 말씀해주세요!
[Noitce] 고쳐야하거나 틀린 것이 있으면 말씀해주세요!
[Noitce] 고쳐야하거나 틀린 것이 있으면 말씀해주세요!
[Noitce] 고쳐야하거나 틀린 것이 있으면 말씀해주세요!
[Noitce] 고쳐야하거나 틀린 것이 있으면 말씀해주세요!
[Noitce] 고쳐야하거나 틀린 것이 있으면 말씀해주세요!
[Noitce] 고쳐야하거나 틀린 것이 있으면 말씀해주세요!
[noitce!!] 고쳐야하거나 틀린 것이 있으면 말씀해주세요!