Работа с csv файлове в Python
А CSV (стойности, разделени със запетая) файл е обикновен текстов файл, където всеки ред представлява запис с данни и полетата във всеки запис са разделени със запетаи. Обикновено се използва за електронни таблици и бази данни поради своята простота и четливост.
По-долу са някои операции, които извършваме, докато работим с Python CSV файлове в Python
Четене на CSV файл
Четенето от CSV файл се извършва с помощта на обекта reader. CSV файлът се отваря като текстов файл с вградената функция open() на Python, която връща файлов обект. В този пример първо отваряме CSV файла в режим READ, файловият обект се преобразува в обект csv.reader и се извършват допълнителни операции. Кодът и подробното обяснение са дадени по-долу.
Python import csv filename = 'aapl.csv' # File name fields = [] # Column names rows = [] # Data rows with open ( filename 'r' ) as csvfile : csvreader = csv . reader ( csvfile ) # Reader object fields = next ( csvreader ) # Read header for row in csvreader : # Read rows rows . append ( row ) print ( 'Total no. of rows: %d ' % csvreader . line_num ) # Row count print ( 'Field names are: ' + ' ' . join ( fields )) print ( ' n First 5 rows are: n ' ) for row in rows [: 5 ]: for col in row : print ( ' %10s ' % col end = ' ' ) print ( ' n ' )
Изход
Горният пример използва CSV файл aapl.csv който може да бъде изтеглен от тук .
Обяснение:
- с отворен (...) отваря CSV файла в режим на четене безопасно с помощта на контекстен мениджър.
- csv.reader(csvфайл) превръща файла в обект за четене на CSV.
- следващ (csvreader) извлича първия ред като заглавки на колони.
- Преминаване през csvreader за добавяне на всеки ред (като списък) към редове.
- Отпечатайте заглавките на общите редове и първите 5 реда с данни във форматиран изглед.
Четене на CSV файлове в речник с csv
Можем да прочетем CSV файл в речник, като използваме csv модула в Python и класа csv.DictReader. Ето един пример:
Да предположим, че имаме a служители.csv файлът и съдържанието в него ще бъдат:
имеотделрожден ден_месец
Джон СмитHR Юли
Алис Джонсън - октомври
Боб Уилямс Финанси януари
Пример: Това чете всеки ред като речник (заглавки като ключове), след което го добавя към списък.
Python import csv with open ( 'employees.csv' mode = 'r' ) as file : csv_reader = csv . DictReader ( file ) # Create DictReader data_list = [] # List to store dictionaries for row in csv_reader : data_list . append ( row ) for data in data_list : print ( data )
Изход:
{'name': 'Джон Смит' 'department': 'HR' 'birthday_month': 'юли'}
{'name': 'Alice Johnson' 'department': 'IT' 'birthday_month': 'октомври'}
{'name': 'Боб Уилямс' 'department': 'Финанси' 'birthday_month': 'януари'}
Обяснение:
- с отворен (...) отваря файла с помощта на контекстен мениджър.
- csv.DictReader(файл) чете всеки ред като речник, използвайки заглавки като ключове.
- data_list.append(ред) съхранява всеки речник в списък.
Записване в CSV файл
За да напишем в CSV файл, първо отваряме CSV файла в режим WRITE. Файловият обект се преобразува в обект csv.writer и се извършват допълнителни операции. Кодът и подробното обяснение са дадени по-долу.
Python import csv # Define header and data rows fields = [ 'Name' 'Branch' 'Year' 'CGPA' ] rows = [ [ 'Nikhil' 'COE' '2' '9.0' ] [ 'Sanchit' 'COE' '2' '9.1' ] [ 'Aditya' 'IT' '2' '9.3' ] [ 'Sagar' 'SE' '1' '9.5' ] [ 'Prateek' 'MCE' '3' '7.8' ] [ 'Sahil' 'EP' '2' '9.1' ] ] filename = 'university_records.csv' with open ( filename 'w' ) as csvfile : csvwriter = csv . writer ( csvfile ) # Create writer object csvwriter . writerow ( fields ) # Write header csvwriter . writerows ( rows ) # Write multiple rows
Обяснение:
- полета дефинира заглавките на колоните и редовете съдържа данните като списък от списъци.
- с отворено (... 'w') отваря файла в режим на запис, използвайки контекстен мениджър.
- csv.writer(csvfile) създава обект за писане за запис в CSV.
- запис на ред (полета) записва заглавния ред във файла.
- writerows(редове) записва всички редове с данни в CSV наведнъж.
Записване на речник в CSV файл
За да напишете речник в CSV файл, файловият обект (csvfile) се преобразува в обект DictWriter. Подробен пример с обяснение и код е даден по-долу.
Python # importing the csv module import csv # my data rows as dictionary objects mydict = [{ 'branch' : 'COE' 'cgpa' : '9.0' 'name' : 'Nikhil' 'year' : '2' } { 'branch' : 'COE' 'cgpa' : '9.1' 'name' : 'Sanchit' 'year' : '2' } { 'branch' : 'IT' 'cgpa' : '9.3' 'name' : 'Aditya' 'year' : '2' } { 'branch' : 'SE' 'cgpa' : '9.5' 'name' : 'Sagar' 'year' : '1' } { 'branch' : 'MCE' 'cgpa' : '7.8' 'name' : 'Prateek' 'year' : '3' } { 'branch' : 'EP' 'cgpa' : '9.1' 'name' : 'Sahil' 'year' : '2' }] # field names fields = [ 'name' 'branch' 'year' 'cgpa' ] # name of csv file filename = 'university_records.csv' # writing to csv file with open ( filename 'w' ) as csvfile : # creating a csv dict writer object writer = csv . DictWriter ( csvfile fieldnames = fields ) # writing headers (field names) writer . writeheader () # writing data rows writer . writerows ( mydict )
Изход
csv файл Помислете, че CSV файл изглежда така в обикновен текст:
университетски рекорд Обяснение:
- с отворен (...) отваря файл безопасно с помощта на контекстен мениджър.
- csv.DictWriter(... ) картографира речникови ключове към CSV колони.
- writeheader() записва заглавки на колони.
- writerows(mydict) записва всички речници като CSV редове.
Четене на CSV файлове с Pandas
Можем да прочетем а Python CSV файлове с използване на Pandas pandas.read_csv() функция. Ето един пример:
Да предположим, че имаме файл zaposlenih.csv и съдържанието в него ще бъде:
имеотделрожден ден_месец
Джон СмитHR Юли
Алис Джонсън - октомври
Боб Уилямс Финанси януари
В този пример pd.read_csv() чете CSV файла в Pandas DataFrame. Полученият DataFrame може да се използва за различни задачи за обработка и анализ на данни.
Python import pandas as pd # Read the CSV file into a DataFrame df = pd . read_csv ( 'employees.csv' ) # Display the DataFrame print ( df )
Изход:
име отдел рожден ден_месец
0 Джон Смит HR юли
1 Alice Johnson IT октомври
2 Боб Уилямс Финанси януари
Можем да имаме достъп до данни за филтриране на конкретни колони и да извършваме различни операции, използвайки функционалността на pandas DataFrame. Например, ако искаме да имаме достъп до колоната „име“, можем да използваме df[„име“].
Python # Access the 'name' column names = df [ 'name' ] print ( names )
Изход :
0 Джон Смит
1 Алис Джонсън
2 Боб Уилямс
Име: име dtype: обект
Писане на CSV файлове с Pandas
Можем да използваме Pandas за писане на CSV файлове. Може да се направи с помощта на pd.DataFrame() функция. В този пример, панди библиотеката се използва за преобразуване на списък от речници (mydict) в DataFrame, представяща таблични данни. След това DataFrame се записва в CSV файл на Python, наречен „output.csv“, като се използва методът to_csv, създавайки структуриран и четим файл с данни за по-нататъшен анализ или споделяне.
Python import pandas as pd mydict = [ { 'branch' : 'COE' 'cgpa' : '9.0' 'name' : 'Nikhil' 'year' : '2' } { 'branch' : 'COE' 'cgpa' : '9.1' 'name' : 'Sanchit' 'year' : '2' } { 'branch' : 'IT' 'cgpa' : '9.3' 'name' : 'Aditya' 'year' : '2' } { 'branch' : 'SE' 'cgpa' : '9.5' 'name' : 'Sagar' 'year' : '1' } { 'branch' : 'MCE' 'cgpa' : '7.8' 'name' : 'Prateek' 'year' : '3' } { 'branch' : 'EP' 'cgpa' : '9.1' 'name' : 'Sahil' 'year' : '2' } ] # Create a DataFrame from the list of dictionaries df = pd . DataFrame ( mydict ) # Write the DataFrame to a CSV file df . to_csv ( 'output.csv' index = False )
Изходен CSV файл:
клонcgpanameyear
COE9.0Nikhil2
COE9.1Sanchit2
IT9.3Aditya2
SE9.5Sagar1
MCE7.8Prateek3
EP9.1Sahil2
Съхраняване на имейли в CSV файлове
Започваме с импортиране на csv модула и го използваме за съхраняване на имена и имейли като стойности, разделени със запетая. С помощта на функцията open() създаваме CSV файл и след това записваме всеки ред с помощта на записващ обект с отделни колони за имена и имейли.
Python # importing the csv module import csv # field names fields = [ 'Name' 'Email' ] # data rows of csv file rows = [ [ 'Nikhil' '[email protected]' ] [ 'Sanchit' '[email protected]' ] [ 'Aditya' '[email protected]' ] [ 'Sagar' '[email protected]' ] [ 'Prateek' '[email protected]' ] [ 'Sahil' '[email protected]' ]] # name of csv file filename = 'email_records.csv' # writing to csv file with open ( filename 'w' ) as csvfile : # creating a csv writer object csvwriter = csv . writer ( csvfile ) # writing the fields csvwriter . writerow ( fields ) # writing the data rows csvwriter . writerows ( rows )
Изход:
Имейли в csv Създаване на тест