데이터분석/둘째주

파이썬 Python : 반복 가능한 객체의 파일 쓰기 writelines( )

핑크댕댕이 2023. 10. 16. 04:27
728x90

 

iterable 객체 : 반복 가능한 객체

  • 대표적으로 iterable한 타입 - list , tuple, dict, set, str, bytes, range
  • iterable한 타입인지 확인 - instance(변수명, collections.Iterable)
                                              iterable한 타입이 맞으면 True 반환

 

 

 

iterator 객체 : 값을 차례대로 꺼낼 수 있는 객체

  • iterator는 iterable한 객체를 내장함수(iter) 또는 iterable 객체의 메소드로 객체를 생성할 수 있습니다.
  • 파이썬 내장함수 iter()를 사용해 iterator 객체를 만들수 있습니다.
a = [1,2,3]
a_iter = iter(a)
print(type(a_iter))
-- 출력 --
<class 'list_itertator'>

 

  • iterable객체는 매직메소드 __iter__ 메소드를 가지고 있습니다.
b = {1, 2, 3}
dir(b)
-- 출력 --
['__and__', '__class__', '__contains__', '__delattr__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__gt__', '__hash__', '__iand__', '__init__', '__init_subclass__', '__ior__', '__isub__', '__iter__', '__ixor__', '__le__', '__len__', '__lt__', '__ne__', '__new__', '__or__', '__rand__', '__reduce__', '__reduce_ex__', '__repr__', '__ror__', '__rsub__', '__rxor__', '__setattr__', '__sizeof__', '__str__', '__sub__', '__subclasshook__', '__xor__', 'add', 'clear', 'copy', 'difference', 'difference_update', 'discard', 'intersection', 'intersection_update', 'isdisjoint', 'issubset', 'issuperset', 'pop', 'remove', 'symmetric_difference', 'symmetric_difference_update', 'union', 'update']

 

b = {1, 2, 3}
b_iter = b.__iter__()
print(type(b_iter))
-- 출력 --
<class 'set_iterator'>

 

  • iterator는 내장함수(next( )) 또는 iterator 매직 메소드(__next__( ))로 값을 하나씩 꺼낼 수 있습니다.
a = [1, 2, 3]
a_iter = iter(a)
print(next(a_iter))
print(next(a_iter))
print(next(a_iter))
-- 출력 --
1
2
3

 

a = [1, 2, 3]
a_iter = iter(a)
print(a_iter.__next__())
print(a_iter.__next__())
print(a_iter.__next__())
-- 출력 --
1
2
3

 

 

 

728x90

 

writelines( )

writelines()는 리스트 또는 튜플 데이터(반복 가능한 자료형, iterable)를 파일에 쓰기 위한 함수이다.

 

language = ['c/c++', 'jave', 'c#', 'python', 'javascript']

url = '경로/~/'

for item in language:
	with open(url+'파일명.txt', 'a') as f:
		f.write(item)
		f.write('/n')
        

# writelines() 함수 사용
language = ['c/c++', 'jave', 'c#', 'python', 'javascript']

url = '경로/~/'
with open(url+'파일명.txt','a') as f:
	# f.writelines(language)
	f.writelines(item + '\n' for item in language)	#줄바꿈 추가
-- 출력 --


 

[실습]

딕셔너리에 저장된 과목별 점수를 파일에 저장하는 코드를 작성하자.

(국어: 85, 영어: 90, 수학: 92, 과학: 79, 역사: 82)

scoreDict = {'kor':85, 'eng':90, 'math':92, 'sci':79, 'his':82}

url = '경로/~/'
for key in scoreDict.keys():
	with open(url+'파일명.txt', 'a') as f:
		f.write(key + '\t' + str(scoreDict[key]) + '\n')
-- 파일에 저장된 값 --
kor         : 85
eng        :  90
math      :  92
sci          :  79
his          :  82

 

# print() file옵션 사용
# 변수의 값 형태 그대로 저장됨
# iterable한 타입전부 가능
scoreDict = {'kor':85, 'eng':90, 'math':92, 'sci':79, 'his':82}

url = '경로/~/'
with open(url+'파일명.txt', 'a') as f:
	print(scoreDict, file=f)
-- 파일에 저장된 값 --
{'kor':85, 'eng':90, 'math':92, 'sci':79, 'his':82}

 

 

 

반응형