ID:
PW:

     0 분
     8 분

엔지니어 돌종
  dolljong
프로그래밍 Tips
프로그래밍에 관한 Tip을 공유하는 곳입니다.


[python](엔지니어를 위한) 파이썬 시작하기[5-1]파일출력
이석종  2022-08-21 16:54:44, 조회 : 276, 추천 : 67
- Download #1 : engpython05.png (14.6 KB), Download : 15


2. 파일 쓰기

파일 쓰기는 읽기와 비슷하다. 열고(open) 쓰고(write) , 닫고(close).

open은 옵션만 ‘w’로 바꿔주면 된다. 읽을 대는 ‘r’이고 쓸 대는 ‘w’다.

 

f = open("d:/dev/python/w.txt", 'w')

 

만일 이미 있는 파일에 추가하려면 ‘w’대신 ‘a’를 쓰면 된다.

f = open("d:/dev/python/w.txt", 'a')

 

write()

파일에 쓰는 방법은 f.write(내용)이다. 내용은 출력된 한줄이다.

 

위에서 작성한 프로그램 마지막에 입력된 내용을 출력하는 기능을 추가해보자. Node번호와 변위 성분 UX, UY, UZ만 출력한다고 해보자. 이전 프로그램의 마지막에 있던 print는 주석으로 처리햇다.

f=open("d:/dev/python/result.txt", 'r')
result=f.readlines()
f.close()
nodedisps=[]
for iresult in result[1:]:
  isplt=iresult.split()
  inode=int(isplt[
0])
  idisp=list(map(float,isplt[
1:]))
  inodedisp=[inode]+idisp
  nodedisps.append(inodedisp)
#print(nodedisps)

f=open(
"d:/dev/python/wresult.txt", 'w')
for line in nodedisps:
  f.write(
f'{line[0]} {line[1]} {line[2]} {line[3]}\n')
f.close()

 

write문은 한줄씩 출력하기 때문에 for문을 써야 한다. 이전에 파일을 읽어서 nodedisps라는 리스트에 넣어놨기 때문에  nodedisps 리스트를 순회하면 된다. 각 리스트는 line에 넣었다.

출력문 write를 주목하다. 4강에서 공부한 f-string 포맷팅을 썼다.  line[0]부터 line[3]까지 한칸씩 의웠다. 마지막에 \n이 있어야 줄이 넘어간다.

 

이 코드를 readwrite.py로 저장하고 실행하면 d:/dev/python 디렉터리에 wresult.txt파일이 생겼을 것이다. 파일을 열어보면 아래와 같이 출력되었을 것이다.

101 351.754 351.754 351.754
102 259.268 259.268 259.268
103 259.268 259.268 259.268
104 259.268 259.268 259.268
105 243.063 243.063 243.063

 

 문제 없어 보인다. 하지만 만약 첫번째 줄의 351.754가 1351.7541였다면 어땠을까?

 

101 1351.7541 351.754 351.754
102 259.268 259.268 259.268
103 259.268 259.268 259.268
104 259.268 259.268 259.268
105 243.063 243.063 243.063

 

자릿수가 맞지 않아 읽기가 어려워질 것이다. 그래서 이렇게 행과 열 형태로 된 데이터를 출력할 때는 폭과 자리수를 정해주는 것이 좋다.

<입력부분 생략>

 

f=open("d:/dev/python/wresult.txt", 'w')
for line in nodedisps:
  f.write(
f'{line[0]:5} {line[1]:15.5f} {line[2]:15.5f} {line[3]:15.5f}\n')
f.close()

 

node는 5자리로 {line[0]:5} 변위값은 15자리를 차지하고 소수점 이하는 5자를 표시하도록 {line[1]:15.5f} f-포맷팅을 변경하였다.

 

실행결과는 아래와 같다.

  101       351.75400       351.75400       351.75400
 
102       259.26800       259.26800       259.26800
 
103       259.26800       259.26800       259.26800
 
104       259.26800       259.26800       259.26800
 
105       243.06300       243.06300       243.06300

 

 

이번 시간에는 파일을 읽고 쓰는 과정에서 open, readlines, read, write를 공부했다. 그리고 읽은 문자열을 처리하는 과정에서 strip, split, map, append 등을 공부했다. 출력하는 과정에서는 f-string을 다시 공부했다. 읽고 쓰는 과정은 이런 패턴으로 진행되므로 기본적으로 알고 있는 상태에서 조금씩 바꿔서 적용하면 된다.

 

다음 시간에는 함수에 대해서 공부하겠다.



  추천하기   목록보기

Copyright 1999-2023 Zeroboard / skin by zero
구조설계의 미래를 준비하는 모임 [구조설계미래포럼]