내 연락처 정보
우편메소피아@프로톤메일.com
2024-07-12
한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina
목차
csv 파일을 읽고 쓸 때 일반적으로 파일 경로, 열기 모드, 문자 인코딩 등과 같은 문제를 처리해야 합니다. newline='' 매개변수는 일반적으로 csv 파일을 읽고 쓸 때 파일 읽기 및 쓰기가 Windows 시스템의 줄바꿈 문자에 의해 영향을 받지 않도록 하기 위해 사용됩니다. txt 파일과 csv 파일은 상호 변환을 지원하므로 txt 파일 읽기 및 쓰기가 csv 파일에 완벽하게 적용됩니다.
매개변수 | 기본값 | 설명하다 |
구분 기호 | , | CSV 파일에서 값(또는 필드)을 구분하는 데 사용되는 문자를 말합니다. |
스킵초기공간 | 거짓 | 구분 기호 뒤의 공백이 해석되는 방식을 제어합니다. True이면 초기 공백이 제거됩니다. |
라인터미네이터 | 영어: 새로운 | 줄을 끝내는 데 사용되는 일련의 문자를 나타냅니다. |
인용문자 | " | 필드에 특수 문자(예: 구분 기호)가 있는 경우 값을 참조하는 데 사용되는 단일 문자열을 나타냅니다. 예를 들어 "0,0"에는 "가 포함됩니다.,"의 경우 quotechar="""를 사용하여 "" 안의 데이터를 전체적으로 처리할 수 있습니다. '0,0'을 사용하는 경우 quotechar="'"를 사용할 수 있습니다. |
인용하다 | csv.견적_없음 | 저자가 인용문을 생성하거나 독자가 인식하는 시기를 제어합니다(다른 옵션은 위 참조). |
이스케이프 문자 | 없음 | quoted가 quote로 설정된 경우 구분 기호를 이스케이프하는 데 사용되는 한 문자 문자열입니다. |
더블쿼터 | 진실 | 필드 내의 따옴표 처리를 제어합니다.언제진실 읽을 때는 연속된 두 개의 따옴표가 하나로 해석되고, 쓸 때는 데이터에 포함된 각 따옴표 문자가 두 개의 따옴표로 기록됩니다. 기본적으로 큰따옴표는 True로 설정됩니다. 결과적으로 두 개의 연속된 큰따옴표는 읽을 때 하나로 해석됩니다. 큰따옴표가 False로 설정된 경우 연속된 큰따옴표가 출력에 나타납니다. |
- import csv
-
- with open(file_name, 'r', encoding='utf-8-sig') as f:
- reader = csv.reader(f) # 创建csv阅读器对象,读取所有有效数据,返回结果为一个迭代器类对象
- for data in reader: # 遍历每一行的数据
- print(data)
인코딩은 BOM 문자를 자동으로 처리하고 ufeff 발생을 제거할 수 있는 utf-8-sig로 인코딩 형식을 지정할 수 있습니다.
- with open(file_name, 'r', encoding='utf-8-sig') as f:
- reader = csv.reader(f)
- list_csv = list(reader)
- for i in range(len(list_csv)-5,len(list_csv)): # 如读取后5行数据
- print(list_csv[i])
- print(list_csv[i][:3]) # 读取指定列数据
txt 파일의 읽기 방법 readlines() 및 read()를 사용하면 읽기 데이터에 처리해야 할 줄바꿈이 있습니다.CSV 라이브러리를 가져올 필요가 없습니다.
- with open(file_name, 'r', encoding='utf-8-sig') as f:
-
- reader_lines = f.readlines() # 读取所有行放在一个列表中
- for da in reader_lines: # 也可以使用range方法读取指定行的数据,读取结果中有换行符需要处理
- print(da.replace('n',''))
-
- reader = f.read()
- print(reader)
사전 형태로 데이터를 읽고, 인쇄된 데이터는 사전 키-값 쌍 형태입니다.
- with open(file_name,'r', encoding='utf-8-sig',newline='') as f:
- reader =csv.DictReader(f)
- for r in reader:
- print(r)
CSV 라이브러리를 가져올 필요가 없습니다.
txt 파일의 write 및 writeline을 사용하면 문자 안의 영문 쉼표는 가로 탭 문자 탭으로 인식되고, 개행 문자는 줄 바꿈을 위한 세로 탭 문자 입력으로 인식됩니다. 빈 행을 삽입하려면 데이터 매개변수에 줄바꿈 문자를 사용하세요. 빈 셀을 쓰려면 데이터 매개변수에 쉼표를 사용하세요.
- with open(file_name, 'w', newline='') as f:
- f.write('测试写入数据操作n')
- f.write('n')
- f.writelines(["角色管理,测试测试", "账号管理n", "部门管理n"])
데이터를 쓸 때 문자열, 목록, 튜플, 집합, 사전 등과 같은 순회 가능한 개체가 될 수 있는 변수를 허용합니다. [문자열은 각 문자를 셀에 개별적으로 채우고 사전은 순회하여 키를 씁니다]. writerow는 단일 행 데이터를 쓰는 데 사용되고 writerows는 여러 행의 데이터를 쓰는 데 사용됩니다.
- with open(file_name, 'w', newline='') as f:
- ws = csv.writer(f) # 创建一个写入文件对象
- ws.writerow([]) # 列表内容为空,插入的是一个空行
- ws.writerow(["设备实时监控", "设备数据列表", "设备报警分析"]) # 列表数据
- ws.writerow(("角色管理", "账号管理", "部门管理")) # 元组数据
-
- write_data = ['贾史王薛',
- ['贾不假,白玉为堂金作马', '阿房宫,三百里,住不下金陵一个史', '东海缺少白玉床,龙王请来金陵王',
- '丰年好大雪,珍珠如土金如铁'], ('cao', 'xue', 'qin', 'shu'), {'曹', '雪', '芹', '书'},
- {'贾': '宝玉', '史': '湘云', '王': '熙凤', '薛': '宝钗'},
- {'贾': '宝玉', '史': '湘云', '王': '熙凤', '薛': '宝钗'}.values()]
- ws.writerows(write_data) # writerows写入多行数据
데이터를 쓸 때 DictWriter는 사전 키를 기반으로 필드 이름에 키가 있는지 확인해야 합니다. 키가 존재하지 않으면 알려진 사전 데이터와 알려지지 않은 사전 데이터를 모두 추가해야 하는 경우 먼저 모든 데이터를 읽을 수 있습니다. 작성해야 하는 데이터의 키를 원본 파일 헤더와 비교(원본 파일 헤더 읽기)하여 헤더 목록에 추가한 후 데이터를 작성합니다.
- fieldnames = ['姓氏', '人物', '说明'] # 表头
- dictate = [{'姓氏': '贾', '人物': "宝玉"}, {'姓氏': '史', '人物': "湘云"}, {'姓氏': '王', '人物': "熙凤"},
- {'姓氏': '薛', '人物': "宝钗"}]
- with open(file_name, 'w', newline='') as f:
- write = csv.DictWriter(f, fieldnames=fieldnames, delimiter=',')
- write.writeheader() # 写入表头
- write.writerow({'姓氏': '贾', '人物': "宝玉"}) # 单行模式写入
- write.writerows(dictate) # 多行模式写入
원리: 먼저 원본 파일 데이터를 읽고 목록 저장소로 전송한 다음 목록 메서드를 사용하여 얻은 목록을 기반으로 추가, 삭제 및 기타 작업을 수행하고 마지막으로 여러 줄 쓰기를 사용하여 수정된 목록 데이터를 파일에 씁니다.
- # 第一步:读取数据
- with open(file_name, 'r+', newline='') as f:
- file_csv_data = list(csv.reader(f))
-
- # 第二步:操作数据
- # 插入数据
- file_csv_data.insert(2, '贾史王薛') # 在某行插入一行数据,如在第3行插入数据
- file_csv_data[2].insert(0, '红楼四大家族') # 在指定单元格插入数据,如在3行1列的单元格插入数据
-
- # 修改数据
- file_csv_data[2] = ['贾不假,白玉为堂金作马', '阿房宫,三百里,住不下金陵一个史', '东海缺少白玉床,龙王请来金陵王',
- '丰年好大雪,珍珠如土金如铁', ''] # 修改指定行一行数据
- file_csv_data[2][4] = '葫芦僧判葫芦案' # 修改某一单元格数据,如修改3行5列数据
-
- # 修改符合条件的数据数据
- # 修改符合要求的单元格数据:通过for循环遍历判断,例如修改单元格中包含1的数据,将1替换成一
- # for r_id, row in enumerate(file_csv_data): # 通过行号列号修改
- # for c_id, col in enumerate(row):
- # if '1' in col:
- # file_csv_data[r_id][c_id] = col.replace('1', '一')
-
- for row in file_csv_data: # 通过行数据及列号修改,比上面更方便
- for c_id, col in enumerate(row):
- if '1' in col:
- row[c_id] = col.replace('1', '一')
-
- # 第三步:写入报存数据
- with open(file_name, 'w', newline='') as f:
- write_file = csv.writer(f)
- write_file.writerows(file_csv_data)