Condivisione della tecnologia

python: legge e scrive file CSV

2024-07-12

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

Sommario

Parametri del metodo della libreria CSV

Leggi i dati

metodo csv.reader

Operazione di lettura dei dati della riga o della colonna specificata nel file

file txt readlines, metodi di lettura

metodo csv.DictReader

inserimento dati

scrittura del file txt, writelines

metodo csv.writer

metodo csv.DictWriter

Unione lettura-scrittura (modifica e inserimento dati)


Durante la lettura e la scrittura di file CSV, di solito è necessario gestire problemi quali il percorso del file, la modalità di apertura, la codifica dei caratteri, ecc. Il parametro newline='' viene solitamente utilizzato durante la lettura e la scrittura di file CSV per garantire che la lettura e la scrittura del file non siano influenzate dal carattere di nuova riga del sistema Windows. i file txt e i file CSV supportano la conversione reciproca, quindi la lettura e la scrittura dei file txt sono completamente applicabili ai file CSV.

Parametri del metodo della libreria CSV

parametrovalore di defaultdescrivere
delimitatore,Si riferisce ai caratteri utilizzati per separare valori (o campi) in un file CSV.
saltaspazioinizialeFALSO Controlla il modo in cui vengono interpretati gli spazi che seguono i delimitatori. Se Vero, lo spazio bianco iniziale verrà rimosso.
terminatore di lineaio sono quiSi riferisce alla sequenza di caratteri utilizzata per terminare una riga.
citazionechar" Si riferisce a una singola stringa che verrà utilizzata per fare riferimento al valore se nel campo sono presenti caratteri speciali (come i delimitatori). Ad esempio, "0,0" contiene ",Nel caso di ", puoi usare quotechar=""" per trattare i dati in "" come un tutto. Se usi '0,0', puoi usare quotechar="'".
citazionecsv.QUOTE_NONEControlla quando le citazioni vengono generate dall'autore o riconosciute dal lettore (vedi sopra per altre opzioni).
scappare di casaNessunoQuando quoted è impostato su virgolette, è una stringa di un carattere utilizzata per sfuggire al delimitatore.
virgolette doppieVEROControlla la gestione delle virgolette all'interno dei campi.QuandoVERO Durante la lettura, due virgolette consecutive vengono interpretate come una, mentre durante la scrittura, ogni carattere di virgoletta incorporato nei dati viene scritto come due virgolette. Per impostazione predefinita, le virgolette doppie sono impostate su True. Di conseguenza, due virgolette doppie consecutive vengono interpretate come una sola quando vengono lette. Se doublequote è impostato su False, nell'output verranno visualizzate virgolette doppie consecutive.

Leggi i dati

metodo 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)

encoding può specificare il formato di codifica come utf-8-sig, che può elaborare automaticamente i caratteri BOM ed eliminare l'occorrenza di ufeff.

Operazione di lettura dei dati della riga o della colonna specificata nel file
  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]) # 读取指定列数据

file txt readlines, metodi di lettura

Usa i metodi di lettura readlines() e read() dei file txt e ci sono ritorni a capo nei dati letti che devono essere elaborati.Non è necessario importare la libreria 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)

metodo csv.DictReader

Leggi i dati sotto forma di dizionario e i dati stampati sono sotto forma di coppie chiave-valore del dizionario.

  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)

inserimento dati

scrittura del file txt, writelines

Non è necessario importare la libreria CSV

Utilizzare le righe di scrittura e scrittura del file txt per scrivere i dati. Quando lo si utilizza, la virgola inglese nel carattere viene riconosciuta come tabulazione del carattere di tabulazione orizzontale e il carattere di nuova riga viene riconosciuto come carattere di tabulazione verticale per il ritorno a capo della riga. Se vuoi inserire una riga vuota, usa un carattere di nuova riga per il parametro data. Se vuoi scrivere una cella vuota, usa una virgola per il parametro data.

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

  

metodo csv.writer

Quando si scrivono dati, accettare una variabile che può essere un oggetto attraversabile come una stringa, un elenco, una tupla, un set, un dizionario, ecc. [Le stringhe riempiranno ciascun carattere separatamente nelle celle e i dizionari attraverseranno e scriveranno le chiavi]. writerrow viene utilizzato per scrivere dati su riga singola e writerrows viene utilizzato per scrivere più righe di dati.

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

metodo csv.DictWriter

Durante la scrittura dei dati, DictWriter deve determinare se la chiave è nei nomi dei campi in base alla chiave del dizionario. Se non esiste, verrà segnalato un errore. Se è necessario aggiungere tutti i dati del dizionario noti e sconosciuti, è possibile prima leggerli tutti le chiavi dei dati che devono essere scritti, quindi confrontarli con l'intestazione del file originale Confronta (leggere l'intestazione del file originale), aggiungerli all'elenco delle intestazioni e quindi scrivere i dati.

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

Unione lettura-scrittura (modifica e inserimento dati)

Principio: leggere prima i dati del file originale, trasferirli nell'archivio dell'elenco, quindi utilizzare il metodo dell'elenco per aggiungere, eliminare e altre operazioni basate sull'elenco ottenuto e infine scrivere i dati dell'elenco modificato nel file utilizzando la scrittura su più righe.

  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)