Compartilhamento de tecnologia

python – lê e escreve arquivos csv

2024-07-12

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

Índice

parâmetros do método da biblioteca csv

Ler dados

Método csv.reader

Operação de leitura de dados de linha ou coluna especificada em arquivo

linhas de leitura do arquivo txt, métodos de leitura

Método csv.DictReader

entrada de dados

gravação de arquivo txt, linhas de gravação

método csv.writer

Método csv.DictWriter

União de leitura-gravação (modificar e inserir dados)


Ao ler e gravar arquivos CSV, você geralmente precisa lidar com questões como caminho do arquivo, modo de abertura, codificação de caracteres, etc. O parâmetro newline='' geralmente é usado ao ler e gravar arquivos csv para garantir que a leitura e gravação do arquivo não serão afetadas pelo caractere de nova linha do sistema Windows. arquivos txt e arquivos csv suportam conversão mútua, portanto, a leitura e gravação de arquivos txt são totalmente aplicáveis ​​a arquivos csv.

parâmetros do método da biblioteca csv

parâmetrovalor padrãodescrever
delimitador,Refere-se aos caracteres usados ​​para separar valores (ou campos) em um arquivo CSV.
pularespaçoinicialFALSO Ele controla como os espaços após os delimitadores são interpretados. Se for True, o espaço em branco inicial será removido.
terminador de linharnRefere-se à sequência de caracteres usada para terminar uma linha.
citaçãochar" Refere-se a uma única string que será usada para referenciar o valor se caracteres especiais (como delimitadores) ocorrerem no campo. Por exemplo, "0,0" contém ",No caso de ", você pode usar quotechar=""" para tratar os dados em "" como um todo. Se usar '0,0', você pode usar quotechar="'".
citandocsv.QUOTE_NONEControla quando as citações são geradas pelo autor ou reconhecidas pelo leitor (veja acima outras opções).
escapecharNenhumQuando quoted é definido como aspas, é uma string de um caractere usada para escapar do delimitador.
citação duplaverdadeiroControla o tratamento de cotações nos campos.quandoVerdadeiro Ao ler, duas aspas consecutivas são interpretadas como uma, enquanto ao escrever, cada caractere de aspa incorporado nos dados é escrito como duas aspas. Por padrão, aspas duplas estão definidas como True. Como resultado, duas aspas duplas consecutivas são interpretadas como uma só quando lidas. Se doublequote for definido como False, aspas duplas consecutivas aparecerão na saída.

Ler dados

Método 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)

a codificação pode especificar o formato de codificação como utf-8-sig, que pode processar automaticamente caracteres BOM e eliminar a ocorrência de ufeff.

Operação de leitura de dados de linha ou coluna especificada em arquivo
  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]) # 读取指定列数据

linhas de leitura do arquivo txt, métodos de leitura

Use os métodos de leitura readlines() e read() de arquivos txt, e há novas linhas nos dados lidos que precisam ser processados.Não há necessidade de importar a 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

Leia os dados na forma de um dicionário e os dados impressos estão na forma de pares de valores-chave do dicionário.

  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 dados

gravação de arquivo txt, linhas de gravação

Não há necessidade de importar a biblioteca csv

Use as linhas de gravação e gravação do arquivo txt para gravar dados. Ao usá-lo, a vírgula em inglês no caractere é reconhecida como o caractere de tabulação horizontal e o caractere de nova linha é reconhecido como o caractere de tabulação vertical para quebra de linha. Se quiser inserir uma linha em branco, use um caractere de nova linha para o parâmetro de dados. Se quiser escrever uma célula vazia, use uma vírgula para o parâmetro de dados.

  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.writer

Ao escrever dados, aceite uma variável que pode ser um objeto percorrível, como uma string, lista, tupla, conjunto, dicionário, etc. [Strings preencherão cada caractere separadamente nas células, e os dicionários percorrerão e escreverão chaves]. writerow é usado para gravar dados de uma única linha e writerows é usado para gravar várias linhas de dados.

  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

Ao gravar dados, o DictWriter precisa determinar se a chave está nos nomes dos campos com base na chave do dicionário. Se não existir, um erro será relatado. Se você precisar adicionar todos os dados do dicionário conhecidos e desconhecidos, primeiro poderá ler todos. as chaves dos dados que precisam ser gravados e, em seguida, compare-os com o cabeçalho do arquivo original. Compare (leia o cabeçalho do arquivo original), adicione-o à lista de cabeçalhos e, em seguida, grave os dados.

  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ão de leitura-gravação (modificar e inserir dados)

Princípio: primeiro leia os dados originais do arquivo, transfira-os para o armazenamento de lista, depois use o método de lista para adicionar, excluir e outras operações com base na lista obtida e, finalmente, grave os dados da lista modificados no arquivo usando escrita multilinha.

  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)