Berbagi teknologi

python—membaca dan menulis file csv

2024-07-12

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

Daftar isi

parameter metode perpustakaan csv

Membaca data

metode csv.reader

Operasi pembacaan data baris atau kolom yang ditentukan file

baris baca file txt, metode baca

metode csv.DictReader

masukan data

penulisan file txt, baris tulis

metode csv.writer

metode csv.DictWriter

Serikat baca-tulis (memodifikasi dan menyisipkan data)


Saat membaca dan menulis file csv, Anda biasanya perlu menangani masalah seperti jalur file, mode pembukaan, pengkodean karakter, dll. Parameter newline='' biasanya digunakan saat membaca dan menulis file csv untuk memastikan bahwa pembacaan dan penulisan file tidak akan terpengaruh oleh karakter baris baru sistem Windows. File txt dan file csv mendukung konversi timbal balik, sehingga pembacaan dan penulisan file txt sepenuhnya berlaku untuk file csv.

parameter metode perpustakaan csv

parameternilai bawaanmenggambarkan
pembatas,Ini mengacu pada karakter yang digunakan untuk memisahkan nilai (atau bidang) dalam file CSV.
lewati spasi awalPALSU Ini mengontrol bagaimana spasi setelah pembatas diinterpretasikan. Jika Benar, spasi awal akan dihapus.
penentu garissekarangIni mengacu pada urutan karakter yang digunakan untuk mengakhiri suatu baris.
kutipan" Ini mengacu pada string tunggal yang akan digunakan untuk mereferensikan nilai jika karakter khusus (seperti pembatas) muncul di bidang. Misalnya, "0,0" berisi ",Dalam kasus ", Anda dapat menggunakan quotechar=""" untuk memperlakukan data dalam "" secara keseluruhan.
mengutipcsv.KUTIPAN_TIDAK ADAMengontrol kapan kutipan dibuat oleh penulis atau dikenali oleh pembaca (lihat di atas untuk opsi lainnya).
melarikan diriTidak adaKetika kutipan disetel ke kutipan, itu adalah string satu karakter yang digunakan untuk keluar dari pembatas.
tanda kutip gandaBENARMengontrol penanganan kutipan dalam bidang.KapanBENAR Saat membaca, dua kutipan berturut-turut diartikan sebagai satu, sedangkan saat menulis, setiap karakter kutipan yang tertanam dalam data ditulis sebagai dua tanda kutip. Secara default, kutipan ganda diatur ke True. Akibatnya, dua tanda kutip ganda berturut-turut diartikan sebagai satu saat dibaca. Jika tanda kutip ganda diatur ke False, tanda kutip ganda berturut-turut akan muncul di output.

Membaca data

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

pengkodean dapat menentukan format pengkodean sebagai utf-8-sig, yang secara otomatis dapat memproses karakter BOM dan menghilangkan terjadinya ufeff.

Operasi pembacaan data baris atau kolom yang ditentukan 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]) # 读取指定列数据

baris baca file txt, metode baca

Gunakan metode membaca readlines() dan read() file txt, dan ada baris baru dalam data baca yang perlu diproses.Tidak perlu mengimpor perpustakaan 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)

metode csv.DictReader

Data yang dibaca berupa kamus, dan data yang dicetak berupa kamus key-value pair.

  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)

masukan data

penulisan file txt, baris tulis

Tidak perlu mengimpor perpustakaan csv

Gunakan baris tulis dan tulis file txt untuk menulis data. Saat menggunakannya, koma bahasa Inggris pada karakter dikenali sebagai tab karakter tab horizontal, dan karakter baris baru dikenali sebagai karakter tab vertikal yang dimasukkan untuk pembungkusan baris. Jika ingin menyisipkan baris kosong, gunakan karakter baris baru untuk parameter data. Jika ingin menulis sel kosong, gunakan koma untuk parameter data.

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

  

metode csv.writer

Saat menulis data, terimalah variabel yang dapat menjadi objek yang dapat ditelusuri seperti string, daftar, tupel, himpunan, kamus, dll. [String akan mengisi setiap karakter secara terpisah ke dalam sel, dan kamus akan melintasi dan menulis kunci]. writerow digunakan untuk menulis data satu baris dan writerows digunakan untuk menulis beberapa baris data.

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

metode csv.DictWriter

Saat menulis data, DictWriter perlu menentukan apakah kunci ada dalam nama bidang berdasarkan kunci kamus. Jika tidak ada, kesalahan akan dilaporkan. Jika Anda perlu menambahkan semua data kamus yang dikenal dan tidak dikenal, Anda dapat membaca semuanya terlebih dahulu kunci data yang perlu ditulis, lalu bandingkan dengan header file asli. Bandingkan (baca header file asli), tambahkan ke daftar header lalu tulis datanya.

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

Serikat baca-tulis (memodifikasi dan menyisipkan data)

Prinsip: Pertama membaca data file asli, mentransfernya ke penyimpanan daftar, kemudian menggunakan metode daftar untuk menambah, menghapus, dan operasi lain berdasarkan daftar yang diperoleh, dan terakhir menulis data daftar yang dimodifikasi ke dalam file menggunakan penulisan multi-baris.

  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)