기본적인 파일 읽고 쓰기에 대한 내용은 링크참고
특히 파일읽고쓰기 할 때에는 with문을 쓰는 것을 권장한다.
f = open("C:/doit/새파일.txt", 'w')
f.close()
이렇게 open함수로만 처리하면 f.close()를 해주어야한다.
f.close()는 열려 있는 파일 객체를 닫아 주는 역할을 하는데, 사실 프로그램을 종료할 때 파이썬 프로그램이 열려 있는 파일의 객체를 자동으로 닫아주기 때문에 이 문장은 생략해도 되지만, 쓰기모드로 열었던 파일을 닫지 않고 다시 사용하려고 하면 오류가 발생하기 때문에 close()를 사용해서 닫아 주는 것이 좋다.
그러나 with문은 파일을 열고 닫는 것을 자동으로 처리 해 준다.
그러므로 오류가 발생하는 것을 최대한 막기 위해서는 with문으로 사용하는 것이 좋다.
with open("foo.txt", "w") as f:
f.write("Life is too short, you need python")
CSV파일은 엑셀파일처럼 테이블형식으로 파일을 저장하는 형식이다.
한 줄이 한 개의 행이고, 열 사이에는 쉼표(,)를 넣어 구분한다.
............................................
인덱스, 이름, 반, 번호
0, 정석, 1, 56
1, 범준, 2, 51
2, 미도, 2, 43
.............................................
파이썬으로 csv파일을 읽을 때는 한줄을 배열로 저장한다.
import csv
read_list = []
with open('/Applications/Python 3.8/test.csv', 'r') as file:
file_read = csv.reader(file)
for line in file:
read_list.append(line)
print(read_list)
with open('/Applications/Python 3.8/test.csv', 'r') as f:
reader = csv.DictReader(f)
for c in reader:
print(c)
import csv
file_list = [[0, "정석", 1, 56],[1, "범준", 2, 51],[2, "미도", 2, 43]]
with open('write_test.csv', 'w', newline='') as csvfile:
writer = csv.writer(csvfile)
writer.writerow(["인덱스","이름","반","번호"])
for i in file_list:
writer.writerow(i)
import csv
with open('write_test.csv', 'w', newline='') as csvfile:
writer = csv.DictWriter(csvfile, fieldnames = ['인덱스','이름','반','번호'])
writer.writeheader()
writer.writerow({'인덱스': '0', '이름': '정석', '반': '1', '번호': '56'})
writer.writerow({'인덱스': '1', '이름': '범준', '반': '2', '번호': '29'})
writer.writerow({'인덱스': '2', '이름': '창모', '반': '1', '번호': '34'})
import csv
#CSV읽기
def csv_read(address:str) -> list:
read_list = []
with open(address, 'r') as f:
file_read = csv.reader(f)
for line in file_read:
read_list.append(line)
return read_list
#CSV파일 2개의 데이터의 시리얼넘버를 비교해서 일치하면 관련 데이터를 추가하는 함수
def insert_data(name, output_list, compare_list):
compare_list[0].insert(3,'S/N')
for i in range(1,len(compare_list)):
count = 0
for j in range(1,len(output_list)):
if compare_list[i][0] == output_list[j][3]:
compare_list[i].insert(3,output_list[j][2])
count += 1
break
if count == 0:
compare_list[i].insert(3, 'Not')
file_write(name, compare_list)
#CSV쓰기
#새로 데이터가 추가된 데이터로 다시 새로운 CSV를 만듬.
def file_write(name, new_list):
with open(name, 'w', newline='') as csvfile:
writer = csv.writer(csvfile)
writer.writerow(new_list[0])
for i in new_list[1:]:
writer.writerow(i)