DedSec Project

Συμβόλαια εισαγωγής CSV και όρια τύπων υπολογιστικών φύλλων — DedSec Project

Συμβόλαια εισαγωγής CSV και όρια τύπων υπολογιστικών φύλλων Μηχανισμός και συμβόλαιο Το CSV περιγράφει γραμμές και πεδία, όχι πλήρες σχήμα δεδομένων. Κόμμα μέσα σε εισαγωγικά ανήκει σε ένα…

Μηχανισμός και συμβόλαιο

Το CSV περιγράφει γραμμές και πεδία, όχι πλήρες σχήμα δεδομένων. Κόμμα μέσα σε εισαγωγικά ανήκει σε ένα πεδίο· το απλό split καταστρέφει τη δομή. Όρισε διαχωριστικό, κωδικοποίηση, αλλαγές γραμμής, σειρά κεφαλίδων, μέγιστο πεδίο και τύπους πριν την εισαγωγή. Διατήρησε αναγνωριστικά όπως 0012 ως κείμενο εκτός αν το σχήμα επιβάλλει άλλο τύπο.

Ένα υπολογιστικό φύλλο μπορεί να ερμηνεύσει αρχικό σύμβολο τύπου ως εκτελέσιμη σύνταξη φύλλου. Αυτό διαφέρει από την ανάλυση CSV στον διακομιστή. Για μη έμπιστη εξαγωγή διάλεξε τεκμηριωμένη μορφή μόνο κειμένου ή πολιτική escaping συγκεκριμένου πελάτη και δοκίμασε το πραγματικό πρόγραμμα. Τα εισαγωγικά CSV από μόνα τους δεν αποτρέπουν καθολικά την ερμηνεία τύπων.

Τοπικό παράδειγμα

import csv, io
text = 'id,name\r\n0012,"Alice, Example"\r\n' 
rows = list(csv.DictReader(io.StringIO(text, newline="")))
assert rows == [{"id":"0012", "name":"Alice, Example"}]
def validate(row):
    return set(row) == {"id", "name"} and row["id"].isascii() and row["id"].isdigit()
assert validate(rows[0])
assert not validate({"id":"bad", "name":"fixture"})
print("CSV schema respected")

Έλεγχοι αποτυχίας και όρια

Πρόσθεσε περιπτώσεις ενσωματωμένων αλλαγών γραμμής, ελλιπών ή επιπλέον στηλών και άκυρων bytes. Απόρριψε ή απομόνωσε ελαττωματικές γραμμές με αριθμό γραμμής χωρίς καταγραφή προσωπικών πεδίων. Το παράδειγμα parser δεν καθαρίζει εξαγωγές φύλλων. Αν οι τύποι είναι επιθυμητή δυνατότητα, απομόνωσε έμπιστη παραγωγή τύπων από κείμενο χρήστη και δοκίμασε και τις δύο ροές.

Πρωτογενής αναφορά

Επίσημη τεκμηρίωση