기술나눔

Python - csv 파일 읽기 및 쓰기

2024-07-12

한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina

목차

csv 라이브러리 메소드 매개변수

데이터 읽기

csv.reader 메서드

파일에 지정된 행 또는 열 데이터 읽기 작업

txt 파일 readlines, 읽기 방법

csv.DictReader 메서드

데이터 투입

txt 파일 쓰기, 쓰기 라인

csv.writer 메서드

csv.DictWriter 메서드

읽기-쓰기 결합(데이터 수정 및 삽입)


csv 파일을 읽고 쓸 때 일반적으로 파일 경로, 열기 모드, 문자 인코딩 등과 같은 문제를 처리해야 합니다. newline='' 매개변수는 일반적으로 csv 파일을 읽고 쓸 때 파일 읽기 및 쓰기가 Windows 시스템의 줄바꿈 ​​문자에 의해 영향을 받지 않도록 하기 위해 사용됩니다. txt 파일과 csv 파일은 상호 변환을 지원하므로 txt 파일 읽기 및 쓰기가 csv 파일에 완벽하게 적용됩니다.

csv 라이브러리 메소드 매개변수

매개변수기본값설명하다
구분 기호,CSV 파일에서 값(또는 필드)을 구분하는 데 사용되는 문자를 말합니다.
스킵초기공간거짓 구분 기호 뒤의 공백이 해석되는 방식을 제어합니다. True이면 초기 공백이 제거됩니다.
라인터미네이터영어: 새로운줄을 끝내는 데 사용되는 일련의 문자를 나타냅니다.
인용문자" 필드에 특수 문자(예: 구분 기호)가 있는 경우 값을 참조하는 데 사용되는 단일 문자열을 나타냅니다. 예를 들어 "0,0"에는 "가 포함됩니다.,"의 경우 quotechar="""를 사용하여 "" 안의 데이터를 전체적으로 처리할 수 있습니다. '0,0'을 사용하는 경우 quotechar="'"를 사용할 수 있습니다.
인용하다csv.견적_없음저자가 인용문을 생성하거나 독자가 인식하는 시기를 제어합니다(다른 옵션은 위 참조).
이스케이프 문자없음quoted가 quote로 설정된 경우 구분 기호를 이스케이프하는 데 사용되는 한 문자 문자열입니다.
더블쿼터진실필드 내의 따옴표 처리를 제어합니다.언제진실 읽을 때는 연속된 두 개의 따옴표가 하나로 해석되고, 쓸 때는 데이터에 포함된 각 따옴표 문자가 두 개의 따옴표로 기록됩니다. 기본적으로 큰따옴표는 True로 설정됩니다. 결과적으로 두 개의 연속된 큰따옴표는 읽을 때 하나로 해석됩니다. 큰따옴표가 False로 설정된 경우 연속된 큰따옴표가 출력에 나타납니다.

데이터 읽기

csv.reader 메서드

  1. import csv
  2. with open(file_name, 'r', encoding='utf-8-sig') as f:
  3. reader = csv.reader(f) # 创建csv阅读器对象,读取所有有效数据,返回结果为一个迭代器类对象
  4. for data in reader: # 遍历每一行的数据
  5. print(data)

인코딩은 BOM 문자를 자동으로 처리하고 ufeff 발생을 제거할 수 있는 utf-8-sig로 인코딩 형식을 지정할 수 있습니다.

파일에 지정된 행 또는 열 데이터 읽기 작업
  1. with open(file_name, 'r', encoding='utf-8-sig') as f:
  2. reader = csv.reader(f)
  3. list_csv = list(reader)
  4. for i in range(len(list_csv)-5,len(list_csv)): # 如读取后5行数据
  5. print(list_csv[i])
  6. print(list_csv[i][:3]) # 读取指定列数据

txt 파일 readlines, 읽기 방법

txt 파일의 읽기 방법 readlines() 및 read()를 사용하면 읽기 데이터에 처리해야 할 줄바꿈이 있습니다.CSV 라이브러리를 가져올 필요가 없습니다.

  1. with open(file_name, 'r', encoding='utf-8-sig') as f:
  2. reader_lines = f.readlines() # 读取所有行放在一个列表中
  3. for da in reader_lines: # 也可以使用range方法读取指定行的数据,读取结果中有换行符需要处理
  4. print(da.replace('n',''))
  5. reader = f.read()
  6. print(reader)

csv.DictReader 메서드

사전 형태로 데이터를 읽고, 인쇄된 데이터는 사전 키-값 쌍 형태입니다.

  1. with open(file_name,'r', encoding='utf-8-sig',newline='') as f:
  2. reader =csv.DictReader(f)
  3. for r in reader:
  4. print(r)

데이터 투입

txt 파일 쓰기, 쓰기 라인

CSV 라이브러리를 가져올 필요가 없습니다.

txt 파일의 write 및 writeline을 사용하면 문자 안의 영문 쉼표는 가로 탭 문자 탭으로 인식되고, 개행 문자는 줄 바꿈을 위한 세로 탭 문자 입력으로 인식됩니다. 빈 행을 삽입하려면 데이터 매개변수에 줄바꿈 문자를 사용하세요. 빈 셀을 쓰려면 데이터 매개변수에 쉼표를 사용하세요.

  1. with open(file_name, 'w', newline='') as f:
  2. f.write('测试写入数据操作n')
  3. f.write('n')
  4. f.writelines(["角色管理,测试测试", "账号管理n", "部门管理n"])

  

csv.writer 메서드

데이터를 쓸 때 문자열, 목록, 튜플, 집합, 사전 등과 같은 순회 가능한 개체가 될 수 있는 변수를 허용합니다. [문자열은 각 문자를 셀에 개별적으로 채우고 사전은 순회하여 키를 씁니다]. writerow는 단일 행 데이터를 쓰는 데 사용되고 writerows는 여러 행의 데이터를 쓰는 데 사용됩니다.

  1. with open(file_name, 'w', newline='') as f:
  2. ws = csv.writer(f) # 创建一个写入文件对象
  3. ws.writerow([]) # 列表内容为空,插入的是一个空行
  4. ws.writerow(["设备实时监控", "设备数据列表", "设备报警分析"]) # 列表数据
  5. ws.writerow(("角色管理", "账号管理", "部门管理")) # 元组数据
  6. write_data = ['贾史王薛',
  7. ['贾不假,白玉为堂金作马', '阿房宫,三百里,住不下金陵一个史', '东海缺少白玉床,龙王请来金陵王',
  8. '丰年好大雪,珍珠如土金如铁'], ('cao', 'xue', 'qin', 'shu'), {'曹', '雪', '芹', '书'},
  9. {'贾': '宝玉', '史': '湘云', '王': '熙凤', '薛': '宝钗'},
  10. {'贾': '宝玉', '史': '湘云', '王': '熙凤', '薛': '宝钗'}.values()]
  11. ws.writerows(write_data) # writerows写入多行数据

csv.DictWriter 메서드

데이터를 쓸 때 DictWriter는 사전 키를 기반으로 필드 이름에 키가 있는지 확인해야 합니다. 키가 존재하지 않으면 알려진 사전 데이터와 알려지지 않은 사전 데이터를 모두 추가해야 하는 경우 먼저 모든 데이터를 읽을 수 있습니다. 작성해야 하는 데이터의 키를 원본 파일 헤더와 비교(원본 파일 헤더 읽기)하여 헤더 목록에 추가한 후 데이터를 작성합니다.

  1. fieldnames = ['姓氏', '人物', '说明'] # 表头
  2. dictate = [{'姓氏': '贾', '人物': "宝玉"}, {'姓氏': '史', '人物': "湘云"}, {'姓氏': '王', '人物': "熙凤"},
  3. {'姓氏': '薛', '人物': "宝钗"}]
  4. with open(file_name, 'w', newline='') as f:
  5. write = csv.DictWriter(f, fieldnames=fieldnames, delimiter=',')
  6. write.writeheader() # 写入表头
  7. write.writerow({'姓氏': '贾', '人物': "宝玉"}) # 单行模式写入
  8. write.writerows(dictate) # 多行模式写入

읽기-쓰기 결합(데이터 수정 및 삽입)

원리: 먼저 원본 파일 데이터를 읽고 목록 저장소로 전송한 다음 목록 메서드를 사용하여 얻은 목록을 기반으로 추가, 삭제 및 기타 작업을 수행하고 마지막으로 여러 줄 쓰기를 사용하여 수정된 목록 데이터를 파일에 씁니다.

  1. # 第一步:读取数据
  2. with open(file_name, 'r+', newline='') as f:
  3. file_csv_data = list(csv.reader(f))
  4. # 第二步:操作数据
  5. # 插入数据
  6. file_csv_data.insert(2, '贾史王薛') # 在某行插入一行数据,如在第3行插入数据
  7. file_csv_data[2].insert(0, '红楼四大家族') # 在指定单元格插入数据,如在3行1列的单元格插入数据
  8. # 修改数据
  9. file_csv_data[2] = ['贾不假,白玉为堂金作马', '阿房宫,三百里,住不下金陵一个史', '东海缺少白玉床,龙王请来金陵王',
  10. '丰年好大雪,珍珠如土金如铁', ''] # 修改指定行一行数据
  11. file_csv_data[2][4] = '葫芦僧判葫芦案' # 修改某一单元格数据,如修改3行5列数据
  12. # 修改符合条件的数据数据
  13. # 修改符合要求的单元格数据:通过for循环遍历判断,例如修改单元格中包含1的数据,将1替换成一
  14. # for r_id, row in enumerate(file_csv_data): # 通过行号列号修改
  15. # for c_id, col in enumerate(row):
  16. # if '1' in col:
  17. # file_csv_data[r_id][c_id] = col.replace('1', '一')
  18. for row in file_csv_data: # 通过行数据及列号修改,比上面更方便
  19. for c_id, col in enumerate(row):
  20. if '1' in col:
  21. row[c_id] = col.replace('1', '一')
  22. # 第三步:写入报存数据
  23. with open(file_name, 'w', newline='') as f:
  24. write_file = csv.writer(f)
  25. write_file.writerows(file_csv_data)