Compartir tecnología

Python: leer y escribir archivos csv

2024-07-12

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

Tabla de contenido

parámetros del método de la biblioteca csv

leer datos

método csv.lector

Operación de lectura de datos de fila o columna especificada del archivo

líneas de lectura de archivos txt, métodos de lectura

método csv.DictReader

Entrada de datos

escritura de archivos txt, líneas de escritura

método csv.escritor

método csv.DictWriter

Unión lectura-escritura (modificar e insertar datos)


Al leer y escribir archivos csv, normalmente es necesario abordar cuestiones como la ruta del archivo, el modo de apertura, la codificación de caracteres, etc. El parámetro newline='' se usa generalmente al leer y escribir archivos csv para garantizar que la lectura y escritura del archivo no se vea afectada por el carácter de nueva línea del sistema Windows. Los archivos txt y los archivos csv admiten la conversión mutua, por lo que la lectura y escritura de archivos txt son totalmente aplicables a los archivos csv.

parámetros del método de la biblioteca csv

parámetrovalor por defectodescribir
delimitador,Se refiere a los caracteres utilizados para separar valores (o campos) en un archivo CSV.
Saltar espacio inicialFALSO Controla cómo se interpretan los espacios que siguen a los delimitadores. Si es Verdadero, se eliminarán los espacios en blanco iniciales.
terminador de líneaEnfermeraSe refiere a la secuencia de caracteres utilizados para terminar una línea.
Cita char" Se refiere a una única cadena que se utilizará para hacer referencia al valor si aparecen caracteres especiales (como delimitadores) en el campo. Por ejemplo, "0,0" contiene ",En el caso de ", puede usar quotechar=""" para tratar los datos en "" como un todo. Si usa '0,0', puede usar quotechar="'".
citandocsv.QUOTE_NONEControla cuándo las citas son generadas por el autor o reconocidas por el lector (ver arriba para otras opciones).
escapecharNingunoCuando se establece entre comillas, es una cadena de un carácter que se utiliza para escapar del delimitador.
comillas doblesVERDADEROControla el manejo de cotizaciones dentro de los campos.cuandoVerdadero Al leer, dos comillas consecutivas se interpretan como una, mientras que al escribir, cada carácter de comillas incrustado en los datos se escribe como dos comillas. De forma predeterminada, las comillas dobles están establecidas en Verdadero. Como resultado, dos comillas dobles consecutivas se interpretan como una cuando se leen. Si doublequote se establece en False, aparecerán comillas dobles consecutivas en el resultado.

leer datos

método csv.lector

  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)

La codificación puede especificar el formato de codificación como utf-8-sig, que puede procesar automáticamente los caracteres BOM y eliminar la aparición de ufeff.

Operación de lectura de datos de fila o columna especificada del archivo
  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]) # 读取指定列数据

líneas de lectura de archivos txt, métodos de lectura

Utilice los métodos de lectura readlines () y read () de archivos txt, y hay nuevas líneas en los datos leídos que deben procesarse.No es necesario importar la biblioteca 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)

método csv.DictReader

Lea los datos en forma de diccionario y los datos impresos estén en forma de pares clave-valor de diccionario.

  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)

Entrada de datos

escritura de archivos txt, líneas de escritura

No es necesario importar la biblioteca csv

Utilice la escritura y las líneas de escritura del archivo txt para escribir datos. Al usarlo, la coma inglesa en el carácter se reconoce como el carácter de tabulación horizontal y el carácter de nueva línea se reconoce como el carácter de tabulación vertical ingresado para el ajuste de línea. Si desea insertar una fila en blanco, use un carácter de nueva línea para el parámetro de datos. Si desea escribir una celda vacía, use una coma para el parámetro de datos.

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

  

método csv.escritor

Al escribir datos, acepte una variable que pueda ser un objeto transitable, como una cadena, lista, tupla, conjunto, diccionario, etc. [Las cadenas completarán cada carácter por separado en las celdas y los diccionarios atravesarán y escribirán claves]. writerow se usa para escribir datos de una sola fila y writerows se usa para escribir varias filas de datos.

  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写入多行数据

método csv.DictWriter

Al escribir datos, DictWriter necesita determinar si la clave está en los nombres de campo según la clave del diccionario. Si no existe, se informará un error. Si necesita agregar todos los datos del diccionario conocidos y desconocidos, primero puede leerlos. las claves de los datos que deben escribirse y luego compárelo con el encabezado del archivo original. Compare (lea el encabezado del archivo original), agréguelo a la lista de encabezados y luego escriba los datos.

  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) # 多行模式写入

Unión lectura-escritura (modificar e insertar datos)

Principio: primero lea los datos del archivo original, transfiéralo al almacenamiento de la lista, luego use el método de lista para agregar, eliminar y otras operaciones basadas en la lista obtenida, y finalmente escriba los datos de la lista modificada en el archivo usando escritura de varias líneas.

  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)