Python CSV: odczyt i zapis plików CSV

W tym samouczku nauczymy się czytać i zapisywać w plikach CSV w Pythonie na przykładach.

Format CSV (Comma Separated Values) to jeden z najprostszych i najczęstszych sposobów przechowywania danych tabelarycznych. Aby przedstawić plik CSV, należy go zapisać z rozszerzeniem .csv .

Weźmy przykład:

Jeśli otworzysz powyższy plik CSV za pomocą edytora tekstu, takiego jak wysublimowany tekst, zobaczysz:

 SN, imię i nazwisko, miasto 1, Michael, New Jersey 2, Jack, Kalifornia 

Jak widać, elementy pliku CSV są oddzielone przecinkami. Tutaj ,jest ogranicznik.

Możesz mieć dowolny pojedynczy znak jako swój separator, zgodnie ze swoimi potrzebami.

Uwaga: Moduł csv może być również używany do innych rozszerzeń plików (takich jak: .txt ), o ile ich zawartość ma odpowiednią strukturę.

Praca z plikami CSV w Pythonie

Chociaż moglibyśmy użyć wbudowanej open()funkcji do pracy z plikami CSV w Pythonie, istnieje dedykowany csvmoduł, który znacznie ułatwia pracę z plikami CSV.

Zanim będziemy mogli użyć metod do csvmodułu, musimy najpierw zaimportować moduł używając:

 import csv 

Czytanie plików CSV za pomocą csv.reader ()

Aby odczytać plik CSV w Pythonie, możemy skorzystać z csv.reader()funkcji. Załóżmy, że w bieżącym katalogu mamy csvplik o nazwie people.csv z następującymi wpisami.

Nazwa Wiek Zawód
Jacek 23 Lekarz
Młynarz 22 Inżynier

Przeczytajmy ten plik używając csv.reader():

Przykład 1: Przeczytaj CSV z separatorem przecinków

 import csv with open('people.csv', 'r') as file: reader = csv.reader(file) for row in reader: print(row) 

Wynik

 („Imię”, „Wiek”, „Zawód”) („Jack”, „23”, „Lekarz”) („Miller”, „22”, „Inżynier”) 

Tutaj otworzyliśmy plik people.csv w trybie odczytu za pomocą:

 with open('people.csv', 'r') as file:… 

Aby dowiedzieć się więcej o otwieraniu plików w Pythonie, odwiedź: Python File Input / Output

Następnie csv.reader()jest używany do odczytu pliku, który zwraca iterowalny readerobiekt.

readerPrzedmiot jest następnie powtarzana z zastosowaniem forpętli drukowania zawartość każdego rzędu.

W powyższym przykładzie używamy csv.reader()funkcji w trybie domyślnym dla plików CSV z separatorem przecinkowym.

Jednak funkcja jest znacznie bardziej konfigurowalna.

Załóżmy, że nasz plik CSV używał tabulatora jako separatora. Aby odczytać takie pliki, możemy przekazać do csv.reader()funkcji parametry opcjonalne . Weźmy przykład.

Przykład 2: Odczyt pliku CSV z ogranicznikiem tabulacji

 import csv with open('people.csv', 'r',) as file: reader = csv.reader(file, delimiter = ' ') for row in reader: print(row) 

Zwróć uwagę na opcjonalny parametr delimiter = ' 'w powyższym przykładzie.

Pełna składnia csv.reader()funkcji to:

 csv.reader(csvfile, dialect='excel', **optional_parameters) 

Jak widać ze składni, możemy również przekazać do csv.reader()funkcji parametr dialektu . dialectParametr pozwala nam funkcja bardziej elastyczne. Aby dowiedzieć się więcej, odwiedź: Odczytywanie plików CSV w Pythonie.

Pisanie plików CSV za pomocą csv.writer ()

Aby napisać do pliku CSV w Pythonie, możemy użyć csv.writer()funkcji.

csv.writer()Funkcja zwraca writerobiekt, który przetwarza dane użytkownika w ograniczonym ciągiem. Ten ciąg może być później użyty do zapisania w plikach CSV przy użyciu writerow()funkcji. Weźmy przykład.

Przykład 3: Zapis do pliku CSV

 import csv with open('protagonist.csv', 'w', newline='') as file: writer = csv.writer(file) writer.writerow(("SN", "Movie", "Protagonist")) writer.writerow((1, "Lord of the Rings", "Frodo Baggins")) writer.writerow((2, "Harry Potter", "Harry Potter")) 

Po uruchomieniu powyższego programu tworzony jest plik protagonist.csv o następującej treści:

 SN, Movie, Protagonist 1, Lord of the Rings, Frodo Baggins 2, Harry Potter, Harry Potter 

W powyższym programie otworzyliśmy plik w trybie do pisania.

Następnie przekazaliśmy każdy wiersz jako listę. Listy te są konwertowane na rozdzielany ciąg znaków i zapisywane w pliku CSV.

Przykład 4: Pisanie wielu wierszy za pomocą writerows ()

Jeśli musimy zapisać zawartość dwuwymiarowej listy do pliku CSV, oto jak możemy to zrobić.

 import csv csv_rowlist = (("SN", "Movie", "Protagonist"), (1, "Lord of the Rings", "Frodo Baggins"), (2, "Harry Potter", "Harry Potter")) with open('protagonist.csv', 'w') as file: writer = csv.writer(file) writer.writerows(csv_rowlist) 

The output of the program is the same as in Example 3.

Here, our 2-dimensional list is passed to the writer.writerows() method to write the content of the list to the CSV file.

Example 5: Writing to a CSV File with Tab Delimiter

 import csv with open('protagonist.csv', 'w') as file: writer = csv.writer(file, delimiter = ' ') writer.writerow(("SN", "Movie", "Protagonist")) writer.writerow((1, "Lord of the Rings", "Frodo Baggins")) writer.writerow((2, "Harry Potter", "Harry Potter")) 

Notice the optional parameter delimiter = ' ' in the csv.writer() function.

The complete syntax of the csv.writer() function is:

 csv.writer(csvfile, dialect='excel', **optional_parameters) 

Similar to csv.reader(), you can also pass dialect parameter the csv.writer() function to make the function much more customizable. To learn more, visit: Writing CSV files in Python

Python csv.DictReader() Class

The objects of a csv.DictReader() class can be used to read a CSV file as a dictionary.

Example 6: Python csv.DictReader()

Suppose we have the same file people.csv as in Example 1.

Name Age Profession
Jack 23 Doctor
Miller 22 Engineer

Let's see how csv.DictReader() can be used.

 import csv with open("people.csv", 'r') as file: csv_file = csv.DictReader(file) for row in csv_file: print(dict(row)) 

Output

 ('Name': 'Jack', ' Age': ' 23', ' Profession': ' Doctor') ('Name': 'Miller', ' Age': ' 22', ' Profession': ' Engineer') 

As we can see, the entries of the first row are the dictionary keys. And, the entries in the other rows are the dictionary values.

Here, csv_file is a csv.DictReader() object. The object can be iterated over using a for loop. The csv.DictReader() returned an OrderedDict type for each row. That's why we used dict() to convert each row to a dictionary.

Notice that, we have explicitly used the dict() method to create dictionaries inside the for loop.

 print(dict(row)) 

Note: Starting from Python 3.8, csv.DictReader() returns a dictionary for each row, and we do not need to use dict() explicitly.

The full syntax of the csv.DictReader() class is:

 csv.DictReader(file, fieldnames=None, restkey=None, restval=None, dialect='excel', *args, **kwds) 

To learn more about it in detail, visit: Python csv.DictReader() class

Python csv.DictWriter() Class

The objects of csv.DictWriter() class can be used to write to a CSV file from a Python dictionary.

The minimal syntax of the csv.DictWriter() class is:

 csv.DictWriter(file, fieldnames) 

Here,

  • file - CSV file where we want to write to
  • fieldnames - a list object which should contain the column headers specifying the order in which data should be written in the CSV file

Example 7: Python csv.DictWriter()

 import csv with open('players.csv', 'w', newline='') as file: fieldnames = ('player_name', 'fide_rating') writer = csv.DictWriter(file, fieldnames=fieldnames) writer.writeheader() writer.writerow(('player_name': 'Magnus Carlsen', 'fide_rating': 2870)) writer.writerow(('player_name': 'Fabiano Caruana', 'fide_rating': 2822)) writer.writerow(('player_name': 'Ding Liren', 'fide_rating': 2801)) 

The program creates a players.csv file with the following entries:

 player_name,fide_rating Magnus Carlsen,2870 Fabiano Caruana,2822 Ding Liren,2801 

The full syntax of the csv.DictWriter() class is:

 csv.DictWriter(f, fieldnames, restval='', extrasaction='raise', dialect='excel', *args, **kwds) 

To learn more about it in detail, visit: Python csv.DictWriter() class

Using the Pandas library to Handle CSV files

Pandas is a popular data science library in Python for data manipulation and analysis. If we are working with huge chunks of data, it's better to use pandas to handle CSV files for ease and efficiency.

Before we can use pandas, we need to install it. To learn more, visit: How to install Pandas?

Once we install it, we can import Pandas as:

 import pandas as pd 

To read the CSV file using pandas, we can use the read_csv() function.

 import pandas as pd pd.read_csv("people.csv") 

Tutaj program czyta people.csv z bieżącego katalogu.

Aby pisać do pliku CSV, musimy wywołać to_csv()funkcję DataFrame.

 import pandas as pd # creating a data frame df = pd.DataFrame((('Jack', 24), ('Rose', 22)), columns = ('Name', 'Age')) # writing data frame to a CSV file df.to_csv('person.csv') 

Tutaj utworzyliśmy DataFrame przy użyciu pd.DataFrame()metody. Następnie to_csv()wywoływana jest funkcja dla tego obiektu, aby zapisać do person.csv .

Aby dowiedzieć się więcej, odwiedź:

  • Python pandas.read_csv (oficjalna strona)
  • Python pandas.pandas.DataFrame.to_csv (oficjalna strona)

Interesujące artykuły...