본문 바로가기
개발일지/Python

2022.02.09 파이썬 정복 14강 파일 (데이터베이스ㅄㄳ)

by 개발에정착하고싶다 2022. 2. 9.
320x100
# 14강 파일

'''
# 파일 입출력

f = open("live.txt","wt")
f.write("""삶이 그대를 속일지라도
슬퍼하거나 노하지 말라!
우울한 날들을 견디면
믿으라, 기쁨의 날이 오리니""")
f.close()

# 이거는 신기하다 역시나 설명이 없어서 못따라오는 사람 분명히 있을테지만
# 위의 것을 출력하고 나오는 경로로 따라가다보면 live.txt라는게 생성되어있다.
'''


'''
# 파일 읽기

try:
    f = open("live.txt","rt")
    text = f.read()
    print(text)
# 사실상 아래의 수식은 무의미한것같고
# 굳이 finally에서 close를 해줘야하나? 이전 finally파트에서 접속을 해제하기 위해서 사용한다고는 하는데 음.. 추상적이다.
# 뭔 접속일까, 굳이 끊어야할까? 안끊으면 어떻게 되나? 가 궁금해지는데 이거에 대한 설명은 당연하게도 없다.
except FileNotFoundError:
    print("파일이 없습니다.")
finally:
    f.close()
    
# 만약 위와같이 파일 읽기 수식에 있어서 파일이 없으면 FileNotFoundError 이라고 뜬다고 한다.
'''

'''
f = open("live.txt","rt")
while True:
    text = f.read(10) # 이게 10문자씩 출력하는거라고 하는데 실질 결과값은 왜 10문자가 아니라 더 많을까
    if len(text) == 0:
        break
    print(text,end="")
f.close()
'''

'''
f = open("live.txt","rt")
text = "" # 이거는 왜 이렇게 잡아주는 걸까
line = 1
while True:
    row = f.readline()  # readline은 한 줄씩 읽으며 마지막에 도달하면 빈 문자열을 리턴한다고 한다.
    if not row:break # 빈문자열을 리턴해준다 = break까지 자동으로 되는 느낌이긴한데 break를 이런식으로 사용해서 끝내줘야하는것 같다.
    text += str(line) + " : "+row
    line +=1
f.close()
print(text)
'''
'''
# 해설코드
f = open("live.txt","rt")
rows = f.readlines()
for row in rows:
    print(row,end="")
f.close() # 이거는 쓰든 안쓰든 출력값은 변함이 없다. 그런데 뭔가 통신단절? 뭐 그런거 때문에 하는것같다. 애초에
# 왜 통신단절같은걸 해야 하는지 그 이유를 모르겠지만
'''

'''
# 내가 해본 코드
f = open("live.txt","rt")
rows=f.readlines()
for i in rows:
    print(i,end="")
'''

'''
# seek
f = open("live.txt","rt")
f.seek(12,0) # 이게 바이트 숫자라고 한다. 한글은 2바이트, 공백은 1바이트이며 12바이트이후부터 시작해서 읽는거
text=f.read()
f.close()
print(text)
'''

'''
#내용추가

f = open("live.txt","at") # open 을 써줘야 작동이 되더라. open 함수는 뭔 기능일까?
# 오 드디어 설명이 나왔다. open은 파일 입출력을 준비하는 과정이고
# 이게 있다는 말은 사용 후에 close를 사용하여 닫아주는 것이 원칙이라고 한다. 짝꿍인것같다. 
f.write("\n\n푸쉬킨 형님의 말씀이였습니다.") # 아무튼 이게 메모장에 추가되었다.
f.close() # 이제 설명이 나왔다. 예를들어 내가 1개만 작업하면 딱히 상관은 없는데 닫아줘야 다음번에 다시 열어서 작성을 하든 뭘하든
# 문제가 없다고 한다.
# 그러면 모든 수식에 있어서 close를 해주는 건 아닌것같은데 어떨때 close가 쓰이는걸까?
'''
'''
open, close를 사용하면서 매번 파일을 닫는것은 귀찮을 수 있고 가끔 잃어버려 파일이 손상되기도 하기 때문에
이를 방지하기 위해서 with블록을 사용한다고 한다.
그외에 with 블록관련 설명이 있지만 크게 와닿는 설명은 아니다. 이건 내 실력이 향상되면 이해가 될 영역이라고 본다.
'''

''''
with open("live.txt","rt") as f: # as f 로 간단히 사용, 이런 쓰임새가 아주 좋은것같다.
    text = f.read()
print(text)

# 오 이건 좋은것같다.
# 확실히 close 없애고 잘 이용되는 짜임새 있는 코드라고 생각한다.
# 다행히도 이번 챕터는 설명이 충분한것같다.
# sys.argv? 이건 설명이 없었다. 고 봐도 무방할 정도지만..
'''

# 14.2 파일관리

'''
# 파일 관리 함수

# 이거는 대체로 차후에 이용하게 될 것같긴한데
# 누가 코딩은 눈으로 보는 것보다 쳐보는게 낮다고해서 카피 차원이라 하더라도 써봤다.

shutil.coby(a,b) # 파일을 복사한다.
shutil.copytree(a,b) # 디렉토리를 복사한다. 서브 디렉토리까지 전부 복사한다.
shutil.move(a,b) # 파일을 이동한다.
shutil.rmtree(path) # 디렉토리를 삭제한다.
os.rename(a,b) # 파일 이름을 변경한다.
os.remove(f) # 파일을 삭제한다.
os.chmod(f,m) #파일의 퍼미션을 변경한다.
shutil.chown(f,u,g) # 파일의 소유권을 변경한다.
os.link(a,b) #하드 링크를 생성한다.
os.symlink(a,b) # 심볼릭 링크를 생성한다.
'''

'''
import shutil # 아, 위에서 말했던 shutil문을 실행해보면 정의되지 않았다고 땡깡부렸는데, 임포트 해줘야하는 거구나.

shutil.copy("live.txt","live2.txt")
# 오 나 지금알았다. 뭐 알려준적이 없으니깐 ;
# 이렇게 하면 live.txt 파일이 그 파일의 경로에도 생기는 거지만 왼쪽 상단의 네비게이터 상에도 생성이 된다.
# 아마 내용길이상 live.txt를 그대로 복사한것같다.
'''

'''
# 디렉토리 관리 함수

os.chdir(d) # 현재 디렉토리를 변경한다.
os.mkdir(d) # 디렉토리를 생성한다.
os.rmdir(d) # 디렉토리를 제거한다.
os.getcwd() # 현재 디렉토리를 조사한다 # 이거는 왜 ()안에 d를 안넣는가... 하... 진짜 매 부분부분마다 궁금증이 나오네
os.listdir(d) # 디렉토리의 내용을 나열한다.
glob.glob(p) # 패턴과 일치하는 파일의 목록을 나열한다.
'''

'''
# 위의 디렉토리 관리함수에서 나아가서 디렉토리의 경로를 조사 및 조작까지 하는 것

os.path.isabs(f) #절대 경로인지 조사한다. # abs가 절대경로를 의미하는것같다.
os.path.abspath(f) #파일의 절대 경로를 구한다.
os.path.realpath(f) #원본 파일의 경로를 구한다.
os.path.exists(f) #파일의 존재 여부를 조사한다.
os.path.isfile(f) #파일인지 조사한다.
os.path.isdir(f) #디렉토리인지 조사한다.
'''

'''
import os

files = os.listdir("c:\\Test") # 이 백슬래시의 의미는 뭘까
for i in files:
    print(i)
# 음.. 난 출력값이 FileNotFoundError: [WinError 3] 지정된 경로를 찾을 수 없습니다: 'c:\\Test'
# 라고 나오는데, 저자의 설명으로 추론해볼 수 있는것이 뭔가 저 위치에 파일을 만들어두었던 것 같다.
# 나는 귀찮아서 안했지만 암튼 백슬래시의 존재의미가 궁금하다 그냥 경로 표현인가?
# 뭐.... 파일넣고 재시도 해보니깐 각 파일의 이름이 순차적으로 뜬다.
'''

'''
import os

def dumpdir(path): # dumpdir는 뭘까
    files = os.listdir(path) # 리스트덜은 디렉토리리스트 뭐 이런느낌 같은데 그게 와닿지는 않는다 뭔지.
    for i in files:
        fullpath = path+"\\" + i
        if os.path.isdir(fullpath):
            print("[" +fullpath + "]")
            dumpdir(fullpath)
        else:
            print("\t"+fullpath)

dumpdir("c:\\MP3") #뜬금없지만 MP3하니깐 아이언씨가 생각난다..
'''
'''
# 특정 폴더 지정하여 해당 폴더 안의 조건에 부합하는 파일들 명칭 모두 변경하는것
# 전체적으로 약간 난해하지만
# 차후에 활용성에 대해서 익혀두면 유용할 것같다.
import os

path="c:\\Test"
files=os.listdir(path)
for i in files:
    if i.find("-") and i.endswith(".pdf"):
        name = i[0:4] # 이것도 굳이 4로 막아줘야하나?
        ext = i[-4:] # 굳이 이걸 -4로 해줘야하나? # 이걸 설명해주셨다. 확장자가 -4에 있으니 (책 설명 기준.mp3) 잘 활용하면 될것같구 이건
        # 정확한 표현 같다.
        part = name.split("-")
        newname = part[1].strip() + "-" + part[0].strip() + ext
        print(newname)
        os.rename(path+"\\"+i,path+"\\"+newname)


print(name)
print(ext)
'''

# 14.3 데이터베이스
con = sqlite3.connect() # 역시나 시작되었다 약간 설명이 난해하다 싶은건 무조건 거르는 저자의 센스. 진짜 답이없다.
# 기대를 저버리지 않는다.
# 아니 ㅅㅂ 실습을 위한 샘플DB를 만들어보자라니 이게 뭔 개 ㅄ같은 소린지 진짜 하..
# 뭘 만들었다 치자 암것도 모르는 사람이 DB를 어디에 어떤 형식으로 어떤 범위로 어떤 파일써서 만들지 다 커버가 가능한가?
# 진짜 얼마나 생각없이 만든책인지 알수있는 대목이고 이 문구는 319페이지에 있다. ㅅㅂ
cursor = con.cursor()

# 여기서 SQL 명령을 실행한다.

cursor.close()
con.close()

'''
마지막 데이터베이스 편은
꼭 필요한 거여서 꾸역꾸역 해보려고도 했는데
저자가 설명을 진짜 하...
좀 해본사람이 보면 이해가 갈 수는 있을 것도 같은데
책의 맨 뒤 표지에보면 이런 말이 적혀있다.
"누구나 할 수있습니다.
파이썬은 먼저 배워야할 선수 과목이 전혀 없어 ~~~선행학습이 필요없습니다."
"누구나 파이썬을 배울 수 있고 이 책을 읽을 수 있습니다"
진짜 일반 컴퓨터 지식 없는 사람이 나이 상관없이 이 책 12챕터의 sys.argv와 14챕터의 데이터베이스를 이책보고 이해하면
진짜 내 머리가 빠가라서 이해를 못한거 ㅇㅈ 근데 아니면 진짜 저자는 그냥 사기꾼이다.
진짜로 화가 난다.
'''
300x250