Get started learning Python with DataCamp's free Intro to Python tutorial. Learn Data Science by completing interactive coding challenges and watching videos by expert instructors. Start Now!

This site is generously supported by DataCamp. DataCamp offers online interactive Python Tutorials for Data Science. Join 11 million other learners and get started learning Python for data science today!

Good news! You can save 25% off your Datacamp annual subscription with the code LEARNPYTHON23ALE25 - Click here to redeem your discount

Ανάλυση αρχείων CSV


Τι είναι το CSV;

Το CSV σημαίνει 'Τιμές Διαχωρισμένες με Κόμμα'. Η μορφή CSV είναι η πιο κοινή μορφή εισαγωγής και εξαγωγής για βάσεις δεδομένων και υπολογιστικά φύλλα. Ένα αρχείο CSV είναι ένα απλό αρχείο κειμένου που περιέχει μια λίστα δεδομένων. Χρησιμοποιούν κυρίως τον χαρακτήρα κόμματος (,) για να διαχωρίσουν τα δεδομένα, αλλά μερικές φορές χρησιμοποιούν άλλους χαρακτήρες, όπως ελληνικά ερωτηματικά ή tab.

Δείγμα δεδομένων CSV:

... column 1 name,column 2 name, column 3 name
first row data 1,first row data 2,first row data 3
second row data 1,second row data 2,second row data 3
...

Μονάδα CSV στην Python

Ενώ το Python έχει την ενσωματωμένη συνάρτηση open() για εργασία με αρχεία CSV ή οποιοδήποτε άλλο αρχείο απλού κειμένου, υπάρχει μια εξειδικευμένη μονάδα csv που υλοποιεί κλάσεις για την ανάγνωση και τη γραφή δεδομένων σε μορφή csv, καθιστώντας την εργασία με αρχεία CSV πολύ πιο εύκολη.

Σημαντικές συναρτήσεις της μονάδας CSV

csv.field_size_limit – επιστρέφει το μέγιστο μέγεθος πεδίου
csv.get_dialect – λαμβάνει τη διάλεκτο που σχετίζεται με το όνομα
csv.list_dialects – εμφανίζει όλες τις εγγεγραμμένες διαλέκτους
csv.reader – αναγνωρίζει δεδομένα από ένα αρχείο csv
csv.register_dialect - συνδέει διάλεκτο με όνομα
csv.writer – γράφει δεδομένα σε ένα αρχείο csv
csv.unregister_dialect - διαγράφει τη διάλεκτο που σχετίζεται με το όνομα από το μητρώο διαλέκτων
csv.QUOTE_ALL - Εισάγει εισαγωγικά σε όλα, ανεξαρτήτως τύπου.
csv.QUOTE_MINIMAL - Εισάγει εισαγωγικά σε πεδία με ειδικούς χαρακτήρες
csv.QUOTE_NONNUMERIC - Εισάγει εισαγωγικά σε όλα τα πεδία που δεν είναι αριθμητικές τιμές
csv.QUOTE_NONE – Δεν προσθέτει εισαγωγικά σε τίποτα στην έξοδο

Πώς χρησιμοποιείτε τη μονάδα csv;

Αρχικά εισάγετε τη μονάδα csv στο πρόγραμμά σας Python.

import csv

Οι συναρτήσεις writer και reader σας επιτρέπουν να επεξεργάζεστε, να τροποποιείτε και να μετασχηματίζετε τα δεδομένα σε ένα αρχείο CSV.

Πώς να διαβάσετε ένα αρχείο CSV :-

Για να διαβάσουμε δεδομένα από αρχεία CSV χρησιμοποιούμε τη συνάρτηση reader για να δημιουργήσουμε ένα αντικείμενο αναγνώστη.

Για παράδειγμα:

with open(filename, 'r') as csvfile:
    csvreader = csv.reader(csvfile)

Εδώ, πρώτα ανοίγουμε το αρχείο CSV σε λειτουργία ΑΝΑΓΝΩΣΗΣ και ονομάζουμε το αντικείμενο αρχείου csvfile. Χρησιμοποιούμε τον διαχειριστή πλαισίου για να ανοίξουμε το αρχείο ώστε να μην ανησυχούμε για το κλείσιμο του αρχείου. Η συνάρτηση csv.reader παίρνει το αντικείμενο αρχείου ως είσοδο και επιστρέφει ένα αντικείμενο επαναληπτή. Αποθηκεύουμε το αντικείμενο επαναληπτή ως csvreader.

Όπως γνωρίζουμε, το csvreader είναι ένα αντικείμενο επαναληπτή και επομένως μπορούμε να το επαναλάβουμε χρησιμοποιώντας τον βρόχο for:

παράδειγμα 1:

with open(filename, 'r') as csvfile:
    csvreader = csv.reader(csvfile)
    for row in csvreader:
        print(row)

Ο παραπάνω κωδικός θα εκτυπώσει όλες τις σειρές που διαβάζουμε από το αρχείο csv. Παρακαλώ σημειώστε ότι ανοίγουμε το αρχείο με λειτουργία 'r' όταν ήδη υπάρχει.

Τι ακολουθεί;

Το cvreader είναι ένα αντικείμενο επαναληπτή. Επομένως, η μέθοδος .next() επιστρέφει την τρέχουσα σειρά και προχωρά τον iterator στην επόμενη σειρά.

παράδειγμα 2:

with open(filename, 'r') as csvfile:
    csvreader = csv.reader(csvfile)
    fields = csvreader.next()
    for row in csvreader:
        print(row)

Στο παράδειγμα 1, θα δείτε όλες τις σειρές να εκτυπώνονται στην κονσόλα μαζί με την επικεφαλίδα. Στο παράδειγμα 2, η μέθοδος .next() διαβάζει την επικεφαλίδα στο αντικείμενο fields και προχωρά τον iterator στην επόμενη σειρά και επομένως όλες οι σειρές εκτυπώνονται εκτός από την επικεφαλίδα.

Πώς να γράψετε σε ένα αρχείο CSV-

Για να γράψουμε σε ένα αρχείο csv, η μονάδα csv παρέχει τη συνάρτηση csv.writer. Για να γράψουμε δεδομένα, πρώτα ανοίγουμε το αρχείο CSV σε λειτουργία ΓΡΑΦΗΣ ('w'). Το αντικείμενο αρχείου ονομάζεται csvfile. Αποθηκεύουμε το αντικείμενο csv.writer ως csvwriter.

Παράδειγμα: #δηλώστε επικεφαλίδα fields = ['column1','column2', 'column3']

#δηλώστε σειρές
rows = [["foo", "bar", "spam"],
       ["oof", "rab", "maps"],
       ["writerow", "isn't", "writerows"]]

filename = "university_records.csv"

with open(filename, 'w') as csvfile:
    csvwriter = csv.writer(csvfile)
    csvwriter.writerow(fields)
    csvwriter.writerows(rows)

Στο παραπάνω παράδειγμα, η συνάρτηση writerow() θα γράψει μια μοναδική σειρά που είναι το αντικείμενο fields ενώ η μέθοδος writerows() θα γράψει ολόκληρη τη λίστα των σειρών που ορίστηκαν παραπάνω στο αρχείο csv.

Ας προχωρήσουμε ένα βήμα παραπέρα. Διαβάστε το περιεχόμενο ενός αρχείου csv και γράψτε το σε ένα άλλο αρχείο csv.

Παράδειγμα:

with open('newfilename.csv', 'w') as f2:
    with open('mycsvfile.csv', mode='r') as f1:
        reader = csv.reader(f1)
        csvwriter = csv.writer(f2)
        header = next(reader)  # αποθηκεύουμε τις επικεφαλίδες και προχωράμε τον δείκτη reader
        csvwriter.writerow(header) #γράφει την επικεφαλίδα στο νέο αρχείο
        for row in reader:
            csvwriter.writerow(row)

Εδώ, ανοίγουμε το 'newfilename.csv' σε λειτουργία 'W' ως f2 και ανοίγουμε το 'mycsvfile.csv' σε λειτουργία 'r' ως f1. Χρησιμοποιούμε τις συναρτήσεις .next(), .reader(),.writer(), .writerow() της μονάδας csv. Με τη χρήση της .next(), προχωράμε τον δείκτη reader και με τη χρήση της csvwriter.writerow() γράφουμε κάθε εισερχόμενη σειρά μία τη φορά.

Κλάσεις DictReader και DictWriter στην Python

Παρακάτω είναι δύο σημαντικές κλάσεις στην python για ανάγνωση και γράψιμο αρχείων csv.

csv.DictWriter κλάση
csv.DictReader κλάση

Οι DictReader και DictWriter είναι κλάσεις στην Python για την ανάγνωση και τη γραφή σε CSV. Αν και είναι παρόμοιες με τις συναρτήσεις reader και writer, αυτές οι κλάσεις χρησιμοποιούν αντικείμενα λεξικό για την ανάγνωση και την εγγραφή σε αρχεία csv.

DictReader:

Δημιουργεί ένα αντικείμενο που αντιστοιχεί τις πληροφορίες διαβάσματος σε ένα λεξικό του οποίου τα κλειδιά δίνονται από την παράμετρο fieldnames. Αυτή η παράμετρος είναι προαιρετική, αλλά όταν δεν ορίζεται στο αρχείο, τα δεδομένα της πρώτης σειράς γίνονται τα κλειδιά του λεξικού.

Παράδειγμα csv(info.csv)

..... firstname, lastname
foo, bar
foo1, bar1
.....

Παράδειγμα:

    import csv
    with open('info.csv') as csvfile:
    reader = csv.DictReader(csvfile)
    for row in reader:
        print(row['firstname'], row['lastname'])

DictWriter:

Η κλάση csv.DictWriter λειτουργεί όπως μια κανονική writer αλλά αντιστοιχεί λεξικά Python σε σειρές CSV. Η παράμετρος fieldnames είναι μια σειρά κλειδιών που καθορίζουν τη σειρά στην οποία οι τιμές στο λεξικό που δίνεται στη μέθοδο writerow() γράφονται στο αρχείο CSV. Η κλάση ορίζεται ως csv.DictWriter(csvfile, fieldnames, restval='', extrasaction='raise', dialect='excel', args, *kwds)

Παράδειγμα:

    import csv
    f = open('info.csv', 'w')
    with f:

        fnames = ['firstname', 'lastname']
        writer = csv.DictWriter(f, fieldnames=fnames)

        writer.writeheader()
        writer.writerow({'firstname' : 'Rob', 'last_name': 'Scott'})
        writer.writerow({'firstname' : 'Tom', 'last_name': 'Brown'})
        writer.writerow({'firstname' : 'Henry', 'last_name': 'Smith'})

Άσκηση

Σε αυτή την άσκηση, θα δουλέψετε με δεδομένα CSV. Η αποστολή σας είναι να δημιουργήσετε ένα πρόγραμμα Python που θα διαβάζει δεδομένα από ένα αρχείο CSV και θα τα γράφει σε ένα άλλο αρχείο CSV, εξασφαλίζοντας ότι μόνο οι σειρές όπου η τιμή στην πρώτη στήλη είναι μεγαλύτερη από 50 θα περιλαμβάνονται στο αρχείο εξόδου.

import csv # Open the input CSV file with open('inputfile.csv', mode='r') as infile: reader = csv.reader(infile) # Open the output CSV file with open('outputfile.csv', mode='w') as outfile: writer = csv.writer(outfile) # Write header header = next(reader) writer.writerow(header) # Write rows where the value in the first column is greater than 50 for row in reader: if int(row[0]) > 50: # Assuming the first column contains numeric values writer.writerow(row) import csv # Open the input CSV file with open('inputfile.csv', mode='r') as infile: reader = csv.reader(infile) # Open the output CSV file with open('outputfile.csv', mode='w') as outfile: writer = csv.writer(outfile) # Write header header = next(reader) writer.writerow(header) # Write rows where the value in the first column is greater than 50 for row in reader: if int(row[0]) > 50: # Assuming the first column contains numeric values writer.writerow(row) Due to the limitations of this IDE, this solution cannot be tested here, as it requires access to external files. However, you should expect that a new file named `outputfile.csv` will be created, and it will contain the same rows as the input file, except only the rows where the first column contains a value greater than 50.

This site is generously supported by DataCamp. DataCamp offers online interactive Python Tutorials for Data Science. Join over a million other learners and get started learning Python for data science today!

Previous Tutorial Take the Test
Copyright © learnpython.org. Read our Terms of Use and Privacy Policy