[Python]CSV파일 읽기/쓰기

CSV 파일의 읽기와 쓰기에 대해 알아보자

# CSV 파일읽기 및 쓰기
# CSV MINE : text/csv
import csv

# 예제1
with open('./resource/test1.csv', 'r') as f:
    reader = csv.reader(f)
    next(reader)  # __iter__ 사용이 가능한 경우, 반복문을 1회 넘긴다. 여기서는 header 를 건너뛴다.
    # 객체확인
    print(reader)
    # 타입확인
    print(type(reader))
    # 속성확인
    print(dir(reader))
    print()

    for c in reader:  # 리스트로 가져온다.
        print(' : '.join(c))

# 예제2 : 구분자 변경
with open('./resource/test2.csv', 'r') as f:
    reader = csv.reader(f, delimiter='|')

    for c in reader:
        print(c)

# 예제3
with open('./resource/test1.csv', 'r') as f:
    reader = csv.DictReader(f)
    print(reader)
    print(type(reader))
    print(dir(reader))
    print()

    for c in reader:
        for k, v in c.items():
            print(k, v)
        print('-' * 20)

# 예제4
w = [[1, 2, 3], [4, 5, 6], [7, 8, 9], [10, 11, 12], [13, 14, 15], [16, 17, 18], [19, 20, 21]]
with open('./resource/write1.csv', 'w', newline="\n", encoding='UTF-8') as f:
    print(dir(csv))
    writer = csv.writer(f)

    # dir확인
    print(dir(writer))
    # 타입확인
    print(type(writer))

    for v in w:
        print(v)
        writer.writerow(v)

# 예제5
with open('./resource/write2.csv', 'w', newline="\n", encoding='UTF-8') as f:
    # 필드명
    fields = ['One', 'Two', 'Three']

    # Dict Writer
    writer = csv.DictWriter(f, fieldnames=fields)
    # Header Writer
    writer.writeheader()

    for v in w:
        writer.writerow({'One': v[0], 'Two': v[1], 'Three': v[2]})

결과:

<_csv.reader object at 0x0000022AB1762020>
<class '_csv.reader'>
['__class__', '__delattr__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__gt__', '__hash__', '__init__', '__init_subclass__', '__iter__', '__le__', '__lt__', '__module__', '__ne__', '__new__', '__next__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', 'dialect', 'line_num']

Afghanistan : AF
... 중략 ...
Yemen : YE
Zambia : ZM
Zimbabwe : ZW
['Name', 'Code']
['Afghanistan', 'AF']
... 중략 ...
['Yemen', 'YE']
['Zambia', 'ZM']
['Zimbabwe', 'ZW']
<csv.DictReader object at 0x0000022AB17079A0>
<class 'csv.DictReader'>
['__class__', '__delattr__', '__dict__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__gt__', '__hash__', '__init__', '__init_subclass__', '__iter__', '__le__', '__lt__', '__module__', '__ne__', '__new__', '__next__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', '__weakref__', '_fieldnames', 'dialect', 'fieldnames', 'line_num', 'reader', 'restkey', 'restval']

Name Afghanistan
Code AF
--------------------
... 중략 ....
--------------------
Name Yemen
Code YE
--------------------
Name Zambia
Code ZM
--------------------
Name Zimbabwe
Code ZW
--------------------
['Dialect', 'DictReader', 'DictWriter', 'Error', 'QUOTE_ALL', 'QUOTE_MINIMAL', 'QUOTE_NONE', 'QUOTE_NONNUMERIC', 'Sniffer', 'StringIO', '_Dialect', '__all__', '__builtins__', '__cached__', '__doc__', '__file__', '__loader__', '__name__', '__package__', '__spec__', '__version__', 'excel', 'excel_tab', 'field_size_limit', 'get_dialect', 'list_dialects', 're', 'reader', 'register_dialect', 'unix_dialect', 'unregister_dialect', 'writer']
['__class__', '__delattr__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__gt__', '__hash__', '__init__', '__init_subclass__', '__le__', '__lt__', '__module__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', 'dialect', 'writerow', 'writerows']
<class '_csv.writer'>
[1, 2, 3]
[4, 5, 6]
[7, 8, 9]
[10, 11, 12]
[13, 14, 15]
[16, 17, 18]
[19, 20, 21]

You may also like...

답글 남기기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다