Develop/Python

1006 Python 파일 입출력,클래스

포페PostFace 2022. 10. 6. 17:40

파일 입출력

 

import os
print(os.getcwd()) #현재 작업중인 디렉토리 위치 확인.
print(os.listdir('.')) #디렉토리 안에 존재하는 파일 리스트로 리턴.
#['.project', '.pydevproject', '.settings', 'Ex01.py']
print(os.listdir('..')) #디렉토리 상위폴더
print(len(os.listdir('..'))) #디렉토리 상위폴더의 파일 갯수

flist =os.listdir('.')
print('flist :',flist)

def filetype(fn):
    print(fn,":",end='')
    if os.path.isfile(fn) :
        print('file')
    if os.path.isdir(fn) :
        print('directory')    
    


for filename in flist :
    filetype(filename)

#os.rename('a1.txt','a2.txt')
#os.remove("a2.txt")

#os.removedirs('forTest') #==rmdir 폴더가 비어있지 않으면 사용할 수 없다.

import shutil
#shutil.rmtree('forTest') #폴더에 무언가 들어있어도 같이 삭제한다.
shutil.copy('Ex02.py', 'test.py')
f=open('test.txt','a')
f.write('peach')
f.close()
# mode
# 공통점 :파일이 없으면 새로 만든다.
# 'w' : write 파일 내용을 삭제후 작성
# 'a' : add 파일 내용 상관 없이 추가
# 'r' : read 파일 내용을 읽어들임 (기본값)
f2 =open('test2.txt','r') # 읽기전에 파일이 없으면 error
#파일포인터 : 첫번째 글자부터 하나씩 이동해 읽어들임
pos = f2.tell() #파일포인터의 위치를 읽어들임
print('pos : ',pos)
f2.seek(2) # 위치 이동 0부터 시작, 한글은 2개씩 차지한다.
readstr = f2.read()
print('readstr :',readstr)
pos = f2.tell()
print('pos : ',pos)
f2.close()
gugu = open('gugudan.txt','w')  
j=input('구구단 단 입력 :')  
for i in range(1,10) :
    print(j,'*',i,'=',int(j)*i)
    dap = j+' * '+str(i)+' = '+str(int(j)*i)
    if i!=9 :
        dap += '\n'
    gugu.write(dap)
    
    
gugu.close()    
    
print('---------------------')
dan = open('gugudan.txt')
ready=dan.read()
print(ready)
print(type(ready))
dan.close()

print('---------------------')
dan = open('gugudan.txt')
while True :
    readline=dan.readline() #엔터까지 1줄 읽는다.
    if readline=='' :
        break
    print('readline :',readline,end='')
print(type(readline))
dan.close()
print('---------------------')
dan = open('gugudan.txt')
read = dan.readlines()
print('read :',read)
print(type(read)) #<class 'list'>
for r in read :
    print(r,end='')
dan.close()
di={}
fr = open('voca.txt','r')
text =fr.read()
words =text.split()
for word in words :
    if di.get(word) == None :
        di[word] = 1
    else :
        di[word] = di.get(word)+1
    #di[word] = di.get(word,0)+1 로 if문 작성 없이 사용할 수 있다.       
fr.close()
sort_di =sorted(di.items(), key = lambda item: item[1])
fw = open('result.txt','w')
for k,v in sort_di :
    fw.write(k+' '+str(v)+'\n')
fw.close()

클래스 Class

 

class Person : #클래스에 정의할 함수,변수는 전부 들여쓰기
   
    lastname ='김' #클래스 변수 ==static
    def setName(self,name): #메소드 정의시 매개변수 self는 자동 생성된다. 지우면 안됨. 
        print('self :',self)
       
        print('self.lastname :',self.lastname)
        print('Person.lastname :',Person.lastname)
        self.fullname = self.lastname + name #객체 선언. 주소값마다 다르다.
        return self.fullname
p1 = Person() 
p2 = Person() 
print(p1) #주소값 리턴 객체마다 다르다.
print(p2)
print(p1.lastname)
print(p2.lastname)
print(Person.lastname)
fn1 = p1.setName('웬디') #받는 변수가 2갠데 하나만 보내도 되는이유 : self는 객체의 주소(p1의 주소)가 간다.
print('fn1 :',fn1)
print(p1.fullname) # 리턴을 설정해주지 않아도 이런식으로 받아볼 수 있다.
print()
fn2=p2.setName('정국')
print('fn2 :',fn2)
print(p2.fullname)
class Student :
    name = '철수' # 클래스 네임스페이스
    def __init__(self,num): #생성자 __init__(self) : pass가 기본형
        print('Student 생성자',num)
    def info(self):
        self.name='아이유' # 인스턴스 네임스페이스    
s1 = Student(10)
s2 = Student(20)
print(Student.name)
print(s1.name)
print(s2.name)
print()
s1.info() #공통변수를 지역변수로 변환
s2.info()
print(s1.name) #우선순위 차이로 지역변수 리턴
print(s2.name)
print()
Ex03.py

class Bank :
    rate = 0.3
    
    def __init__(self,money):
        self.money=money
    def save(self):
        self.save = self.money+self.money*Bank.rate
    def show(self):
        print('self.save :',int(self.save))        
if __name__ =='__main__' :
    b1 = Bank(10000)
    b1.save()
    b1.show()
    
    b2 = Bank(30000)
    b2.save()
    b2.show()


Ex04.py

#import Ex03
#from Ex03 import Bank
import Ex03 as e3

b3 = e3.Bank(50000)
b3.save()
b3.show()
class Super :
    def __init__(self):
        print('Super init')
    def show(self):
        print('Super show')    
class Sub(Super) :
    def __init__(self):
        Super.__init__(self) # 호출이 없으면 부모 클래스 생성자에 접근하지 않는다.
        print('Sub init')
    def show(self):
        Super.show(self)
        print('Sub show')    
class Sub2(Super):
    pass

s1 =Super()
s1.show()
print('--------------')
s2= Sub()
s2.show()
print('--------------')
s3 = Sub2() # 별도로 생성자를 만들지 않아서 부모 생성자가 호출된다.
s3.show()