Κοινή χρήση τεχνολογίας

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.
skipinitial spaceΨΕΥΔΗΣ Ελέγχει τον τρόπο ερμηνείας των διαστημάτων που ακολουθούν τους οριοθέτες. Εάν είναι True, το αρχικό κενό διάστημα θα αφαιρεθεί.
τερματιστής γραμμήςrnΑναφέρεται στην ακολουθία χαρακτήρων που χρησιμοποιούνται για τον τερματισμό μιας γραμμής.
quotechar" Αναφέρεται σε μια μεμονωμένη συμβολοσειρά που θα χρησιμοποιηθεί για την αναφορά της τιμής εάν στο πεδίο εμφανίζονται ειδικοί χαρακτήρες (όπως οριοθέτες). Για παράδειγμα, το "0,0" περιέχει ",Στην περίπτωση του ", μπορείτε να χρησιμοποιήσετε το quotechar=""" για να χειριστείτε τα δεδομένα στο "" στο σύνολό τους Εάν χρησιμοποιείτε το '0,0', μπορείτε να χρησιμοποιήσετε το quotechar="'".
παραθέτονταςcsv.QUOTE_NONEΕλέγχει όταν δημιουργούνται εισαγωγικά από τον συγγραφέα ή αναγνωρίζονται από τον αναγνώστη (δείτε παραπάνω για άλλες επιλογές).
escapecharΚανέναςΌταν το quoted έχει οριστεί σε ένα εισαγωγικό, είναι μια συμβολοσειρά ενός χαρακτήρα που χρησιμοποιείται για να διαφύγει από τον οριοθέτη.
διπλό εισαγωγικόΑΛΗΘΗΣΕλέγχει τον χειρισμό των εισαγωγικών εντός των πεδίων.πότεΑληθής Κατά την ανάγνωση, δύο διαδοχικά εισαγωγικά ερμηνεύονται ως ένα, ενώ κατά τη σύνταξη, κάθε χαρακτήρας εισαγωγικού που είναι ενσωματωμένος στα δεδομένα γράφεται ως δύο εισαγωγικά. Από προεπιλογή, το doublequote έχει οριστεί σε True. Ως αποτέλεσμα, δύο διαδοχικά διπλά εισαγωγικά ερμηνεύονται ως ένα όταν διαβάζονται. Εάν το doublequote έχει οριστεί σε 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, η οποία μπορεί να επεξεργαστεί αυτόματα χαρακτήρες BOM και να εξαλείψει την εμφάνιση 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

Κατά τη σύνταξη δεδομένων, αποδεχτείτε μια μεταβλητή που μπορεί να είναι διασχίσιμο αντικείμενο, όπως συμβολοσειρά, λίστα, πλειάδα, σύνολο, λεξικό κ.λπ. [Οι συμβολοσειρές θα συμπληρώνουν κάθε χαρακτήρα ξεχωριστά σε κελιά και τα λεξικά θα διασχίζουν και θα γράφουν κλειδιά]. Το Writrow χρησιμοποιείται για την εγγραφή δεδομένων μιας γραμμής και το Writrow χρησιμοποιείται για την εγγραφή πολλών σειρών δεδομένων.

  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)