Python 데이터 지속성-CSV 모듈

CSV stands for comma separated values. 이 파일 형식은 데이터베이스의 스프레드 시트 및 데이터 테이블에서 데이터를 내보내거나 가져올 때 일반적으로 사용되는 데이터 형식입니다. csv 모듈은 PEP 305의 결과로 Python의 표준 라이브러리에 통합되었습니다. PEP 305의 권장 사항에 따라 CSV 파일에서 읽기 / 쓰기 작업을 수행하는 클래스와 메서드를 제공합니다.

CSV는 Microsoft의 Excel 스프레드 시트 소프트웨어에서 선호하는 내보내기 데이터 형식입니다. 그러나 csv 모듈은 다른 방언으로 표현되는 데이터도 처리 할 수 ​​있습니다.

CSV API 인터페이스는 다음과 같은 작성기 및 판독기 클래스로 구성됩니다.

작가()

csv 모듈의이 함수는 데이터를 구분 된 문자열로 변환하고 파일 객체에 저장하는 작성기 객체를 반환합니다. 이 함수에는 쓰기 권한이있는 파일 개체가 매개 변수로 필요합니다. 파일에 기록 된 모든 행은 개행 문자를 발행합니다. 줄 사이의 추가 공백을 방지하기 위해 개행 매개 변수는 ''로 설정됩니다.

작가 클래스는 다음과 같은 방법이 있습니다-

writerow ()

이 메서드는 항목을 반복 가능한 (목록, 튜플 또는 문자열)로 작성하여 쉼표로 구분합니다.

writerows ()

이 메소드는 반복 가능한 목록을 매개 변수로 취하고 각 항목을 파일에서 쉼표로 구분 된 항목 행으로 작성합니다.

Example

다음 예제는 writer () 함수의 사용을 보여줍니다. 먼저 파일이 'w'모드로 열립니다. 이 파일은 작성기 개체를 얻는 데 사용됩니다. 그런 다음 튜플 목록의 각 튜플은 writerow () 메서드를 사용하여 파일에 기록됩니다.

import csv
   persons=[('Lata',22,45),('Anil',21,56),('John',20,60)]
   csvfile=open('persons.csv','w', newline='')
   obj=csv.writer(csvfile)
   for person in persons:
      obj.writerow(person)
csvfile.close()

Output

현재 디렉토리에 'persons.csv'파일이 생성됩니다. 다음 데이터가 표시됩니다.

Lata,22,45
Anil,21,56
John,20,60

목록을 반복하여 각 행을 개별적으로 작성하는 대신 writerows () 메서드를 사용할 수 있습니다.

csvfile=open('persons.csv','w', newline='')
persons=[('Lata',22,45),('Anil',21,56),('John',20,60)]
   obj=csv.writer(csvfile)
   obj.writerows(persons)
   obj.close()

리더()

이 함수는 줄의 반복자를 반환하는 판독기 개체를 반환합니다. csv file. 일반 for 루프를 사용하면 파일의 모든 행이 다음 예에 표시됩니다.

csvfile=open('persons.csv','r', newline='')
   obj=csv.reader(csvfile)
   for row in obj:
      print (row)

산출

['Lata', '22', '45']
['Anil', '21', '56']
['John', '20', '60']

판독기 개체는 반복기입니다. 따라서 csv 파일의 모든 행을 표시하는 데 사용할 수있는 next () 함수를 지원합니다.for loop.

csvfile=open('persons.csv','r', newline='')
   obj=csv.reader(csvfile)
   while True:
   try:
      row=next(obj)
      print (row)
   except StopIteration:
      break

앞서 언급했듯이 csv 모듈은 Excel을 기본 언어로 사용합니다. csv 모듈은 또한 dialect 클래스를 정의합니다. Dialect는 CSV 프로토콜을 구현하는 데 사용되는 표준 집합입니다. 사용 가능한 방언 목록은 list_dialects () 함수로 얻을 수 있습니다.

>>> csv.list_dialects()
['excel', 'excel-tab', 'unix']

iterables 외에도 csv 모듈은 사전 객체를 CSV 파일로 내보내고 읽어서 Python 사전 객체를 채울 수 있습니다. 이를 위해이 모듈은 다음 클래스를 정의합니다.

DictWriter ()

이 함수는 DictWriter 개체를 반환합니다. writer 개체와 비슷하지만 행이 사전 개체에 매핑됩니다. 이 함수에는 쓰기 권한이있는 파일 개체와 사전에 fieldnames 매개 변수로 사용되는 키 목록이 필요합니다. 파일의 첫 번째 줄을 헤더로 쓰는 데 사용됩니다.

writeheader ()

이 메소드는 사전에있는 키 목록을 파일의 첫 번째 행으로 쉼표로 구분 된 행으로 작성합니다.

다음 예에서는 사전 항목 목록이 정의됩니다. 목록의 각 항목은 사전입니다. writrows () 메소드를 사용하여 쉼표로 구분 된 방식으로 파일에 기록됩니다.

persons=[
   {'name':'Lata', 'age':22, 'marks':45}, 
   {'name':'Anil', 'age':21, 'marks':56}, 
   {'name':'John', 'age':20, 'marks':60}
]
csvfile=open('persons.csv','w', newline='')
fields=list(persons[0].keys())
obj=csv.DictWriter(csvfile, fieldnames=fields)
obj.writeheader()
obj.writerows(persons)
csvfile.close()

persons.csv 파일은 다음 내용을 보여줍니다-

name,age,marks
Lata,22,45
Anil,21,56
John,20,60

DictReader ()

이 함수는 기본 CSV 파일에서 DictReader 개체를 반환합니다. 리더 객체의 경우이 객체도 파일의 내용을 검색하는 반복자입니다.

csvfile=open('persons.csv','r', newline='')
obj=csv.DictReader(csvfile)

이 클래스는 파일의 헤더로 사용되는 사전 키를 반환하는 fieldnames 속성을 제공합니다.

print (obj.fieldnames)
['name', 'age', 'marks']

DictReader 개체에 루프를 사용하여 개별 사전 개체를 가져옵니다.

for row in obj:
   print (row)

결과는 다음과 같습니다.

OrderedDict([('name', 'Lata'), ('age', '22'), ('marks', '45')])
OrderedDict([('name', 'Anil'), ('age', '21'), ('marks', '56')])
OrderedDict([('name', 'John'), ('age', '20'), ('marks', '60')])

OrderedDict 개체를 일반 사전으로 변환하려면 먼저 컬렉션 ​​모듈에서 OrderedDict를 가져와야합니다.

from collections import OrderedDict
   r=OrderedDict([('name', 'Lata'), ('age', '22'), ('marks', '45')])
   dict(r)
{'name': 'Lata', 'age': '22', 'marks': '45'}