Teknologian jakaminen

python—lukea ja kirjoittaa csv-tiedostoja

2024-07-12

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

Sisällysluettelo

csv-kirjaston menetelmäparametreja

Lue tiedot

csv.reader-menetelmä

Tiedoston määrittämä rivin tai sarakkeen tietojen lukutoiminto

txt-tiedoston lukulinjat, lukutavat

csv.DictReader-menetelmä

datan syöttö

txt-tiedoston kirjoitus, kirjoitusrivit

csv.writer -menetelmä

csv.DictWriter-menetelmä

Luku-kirjoitusliitto (muokkaa ja lisää tietoja)


Kun luet ja kirjoitat csv-tiedostoja, sinun on yleensä käsiteltävä ongelmia, kuten tiedostopolku, avaustila, merkkikoodaus jne. Parametria newline='' käytetään yleensä csv-tiedostoja luettaessa ja kirjoitettaessa sen varmistamiseksi, että Windows-järjestelmän rivinvaihtomerkki ei vaikuta tiedoston lukemiseen ja kirjoittamiseen. txt- ja csv-tiedostot tukevat keskinäistä muuntamista, joten txt-tiedostojen lukeminen ja kirjoittaminen soveltuvat täysin csv-tiedostoihin.

csv-kirjaston menetelmäparametreja

parametrioletusarvokuvata
erotin,Se viittaa merkkeihin, joita käytetään arvojen (tai kenttien) erottamiseen CSV-tiedostossa.
väliavaruusVÄÄRÄ Se ohjaa, kuinka erottimia seuraavat välilyönnit tulkitaan. Jos True, ensimmäinen välilyönti poistetaan.
rivipääternSe viittaa merkkijonoon, jota käytetään rivin päättämiseen.
quotechar" Se viittaa yhteen merkkijonoon, jota käytetään viittaamaan arvoon, jos kentässä esiintyy erikoismerkkejä (kuten erottimia). Esimerkiksi "0,0" sisältää ",Kun kyseessä on ", voit käyttää quotechar=""":n tietoja kokonaisuutena. Jos käytät arvoa '0,0', voit käyttää quotechar=""-merkkiä.
lainaamallacsv.QUOTE_NONEOhjaa, milloin lainausmerkit ovat kirjoittajan luomia tai lukijan tunnistamia (katso yllä muita vaihtoehtoja).
escapecharEi mitäänKun lainaus on asetettu lainausmerkiksi, se on yhden merkin merkkijono, jota käytetään erottimen poistoon.
kaksoislainausTOTTAOhjaa lainausten käsittelyä kenttien sisällä.kunTotta Lukeessa kaksi peräkkäistä lainausmerkkiä tulkitaan yhdeksi, kun taas kirjoitettaessa jokainen dataan upotettu lainausmerkki kirjoitetaan kahdeksi lainausmerkiksi. Doublequote-asetuksena on oletusarvoisesti True. Tämän seurauksena kaksi peräkkäistä lainausmerkkiä tulkitaan yhdeksi luettaessa. Jos doublequote-asetuksena on False, peräkkäiset lainausmerkit näkyvät tulosteessa.

Lue tiedot

csv.reader-menetelmä

  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)

koodaus voi määrittää koodausmuodoksi utf-8-sig, joka voi automaattisesti käsitellä tuoteluettelon merkkejä ja eliminoida ufeff:n esiintymisen.

Tiedoston määrittämä rivin tai sarakkeen tietojen lukutoiminto
  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-tiedoston lukulinjat, lukutavat

Käytä txt-tiedostojen lukumenetelmiä readlines() ja read(), ja lukutiedoissa on rivinvaihtoja, jotka on käsiteltävä.Csv-kirjastoa ei tarvitse tuoda

  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-menetelmä

Lue tiedot sanakirjan muodossa, ja painetut tiedot ovat sanakirjan avainarvoparien muodossa.

  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)

datan syöttö

txt-tiedoston kirjoitus, kirjoitusrivit

Csv-kirjastoa ei tarvitse tuoda

Käytä txt-tiedoston kirjoitus- ja kirjoitusrivejä tietojen kirjoittamiseen. Kun käytät sitä, merkin englanninkielinen pilkku tunnistetaan vaakasuuntaiseksi sarkainmerkiksi ja rivinvaihtomerkki pystysuoraksi sarkainmerkiksi. Jos haluat lisätä tyhjän rivin, käytä rivinvaihtomerkkiä tietoparametrina. Jos haluat kirjoittaa tyhjän solun, käytä pilkkua tietoparametrina.

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

  

csv.writer -menetelmä

Kun kirjoitat tietoja, hyväksy muuttuja, joka voi olla läpikäytävä objekti, kuten merkkijono, luettelo, monikko, joukko, sanakirja jne. [Jojonot täyttävät jokaisen merkin erikseen soluihin ja sanakirjat kulkevat läpi ja kirjoittavat avaimia]. kirjoitusriviä käytetään yhden rivin tietojen kirjoittamiseen ja kirjoitusrivejä useiden tietorivien kirjoittamiseen.

  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-menetelmä

Kun kirjoitat tietoja, DictWriterin on määritettävä, onko avain kenttien nimissä sanakirjan avaimen perusteella. Jos sitä ei ole, ilmoitetaan virhe kirjoitettavan tiedon avaimet ja vertaa sitä sitten alkuperäisen tiedoston otsikkoon. Vertaa (lue alkuperäinen tiedoston otsikko), lisää se otsikkoluetteloon ja kirjoita sitten tiedot.

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

Luku-kirjoitusliitto (muokkaa ja lisää tietoja)

Periaate: Lue ensin alkuperäisen tiedoston tiedot, siirrä se listamuistiin, käytä sitten listamenetelmää lisäyksiin, poistamiseen ja muihin toimintoihin saadun listan perusteella ja lopuksi kirjoita muokattu listatieto tiedostoon monirivisellä kirjoituksella.

  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)