Обмен технологиями

python — чтение и запись файлов csv

2024-07-12

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

Оглавление

Параметры метода библиотеки csv

Чтение данных

метод csv.reader

Операция чтения данных строки или столбца, указанная в файле

строки чтения txt-файла, методы чтения

csv.DictReader метод

ввод данных

запись txt-файла, строки записи

метод csv.writer

csv.DictWriter метод

Объединение чтения и записи (изменение и вставка данных)


При чтении и записи файлов CSV вам обычно приходится иметь дело с такими проблемами, как путь к файлу, режим открытия, кодировка символов и т. д. Параметр newline='' обычно используется при чтении и записи файлов csv, чтобы гарантировать, что на чтение и запись файла не будет влиять символ новой строки в системе Windows. txt и csv-файлы поддерживают взаимное преобразование, поэтому чтение и запись txt-файлов полностью применимо к csv-файлам.

Параметры метода библиотеки csv

параметрзначение по умолчаниюописывать
разделитель,Он относится к символам, используемым для разделения значений (или полей) в файле CSV.
пропуститьначальныйпробелЛОЖЬ Он контролирует, как интерпретируются пробелы после разделителей. Если True, начальные пробелы будут удалены.
линейныйтерминаторрнЭто относится к последовательности символов, используемых для завершения строки.
quotechar" Он относится к одной строке, которая будет использоваться для ссылки на значение, если в поле встречаются специальные символы (например, разделители). Например, «0,0» содержит «,В случае "вы можете использовать quotechar=""" для обработки данных в "" в целом. Если вы используете "0,0", вы можете использовать quotechar="'".
цитированиеcsv.QUOTE_NONEУправляет тем, когда цитаты генерируются автором или распознаются читателем (другие параметры см. выше).
escapecharНиктоЕсли для параметра 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)

В кодировке можно указать формат кодировки utf-8-sig, который может автоматически обрабатывать символы спецификации и исключать появление ufeff.

Операция чтения данных строки или столбца, указанная в файле
  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() и read() файлов txt, и в считанных данных есть символы новой строки, которые необходимо обработать.Нет необходимости импортировать библиотеку 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 для записи данных. При его использовании английская запятая в символе распознается как символ горизонтальной табуляции, а символ новой строки распознается как символ вертикальной табуляции для переноса строки. Если вы хотите вставить пустую строку, используйте символ новой строки для параметра данных. Если вы хотите написать пустую ячейку, используйте запятую для параметра данных.

  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)