Độ bền dữ liệu Python - Mô-đun CSV

CSV stands for comma separated values. Định dạng tệp này là định dạng dữ liệu thường được sử dụng trong khi xuất / nhập dữ liệu đến / từ bảng tính và bảng dữ liệu trong cơ sở dữ liệu. Mô-đun csv được kết hợp trong thư viện tiêu chuẩn của Python là kết quả của PEP 305. Nó trình bày các lớp và phương pháp để thực hiện các thao tác đọc / ghi trên tệp CSV theo khuyến nghị của PEP 305.

CSV là định dạng dữ liệu xuất được ưa thích bởi phần mềm bảng tính Excel của Microsoft. Tuy nhiên, mô-đun csv cũng có thể xử lý dữ liệu được biểu thị bằng các phương ngữ khác.

Giao diện API CSV bao gồm các lớp người viết và người đọc sau:

nhà văn()

Hàm này trong mô-đun csv trả về một đối tượng nhà văn chuyển đổi dữ liệu thành một chuỗi được phân tách và lưu trữ trong một đối tượng tệp. Hàm cần một đối tượng tệp có quyền ghi dưới dạng tham số. Mỗi hàng được viết trong tệp sẽ tạo ra một ký tự dòng mới. Để ngăn không gian bổ sung giữa các dòng, tham số dòng mới được đặt thành ''.

Lớp nhà văn có các phương thức sau:

ghi ()

Phương thức này viết các mục trong một tệp có thể lặp lại (danh sách, tuple hoặc chuỗi), phân tách chúng bằng ký tự dấu phẩy.

writerows ()

Phương thức này nhận một danh sách các tệp lặp, làm tham số và ghi mỗi mục dưới dạng một dòng mục được phân tách bằng dấu phẩy trong tệp.

Example

Ví dụ sau cho thấy việc sử dụng hàm write (). Đầu tiên, một tệp được mở ở chế độ 'w'. Tệp này được sử dụng để lấy đối tượng nhà văn. Mỗi bộ trong danh sách các bộ sau đó được ghi vào tệp bằng phương thức writerow ().

import csv
   persons=[('Lata',22,45),('Anil',21,56),('John',20,60)]
   csvfile=open('persons.csv','w', newline='')
   obj=csv.writer(csvfile)
   for person in persons:
      obj.writerow(person)
csvfile.close()

Output

Thao tác này sẽ tạo tệp 'people.csv' trong thư mục hiện tại. Nó sẽ hiển thị dữ liệu sau đây.

Lata,22,45
Anil,21,56
John,20,60

Thay vì lặp lại danh sách để viết từng hàng riêng lẻ, chúng ta có thể sử dụng phương thức writerows ().

csvfile=open('persons.csv','w', newline='')
persons=[('Lata',22,45),('Anil',21,56),('John',20,60)]
   obj=csv.writer(csvfile)
   obj.writerows(persons)
   obj.close()

người đọc()

Hàm này trả về một đối tượng reader trả về một trình lặp các dòng trong csv file. Sử dụng vòng lặp for thông thường, tất cả các dòng trong tệp được hiển thị trong ví dụ sau:

Thí dụ

csvfile=open('persons.csv','r', newline='')
   obj=csv.reader(csvfile)
   for row in obj:
      print (row)

Đầu ra

['Lata', '22', '45']
['Anil', '21', '56']
['John', '20', '60']

Đối tượng reader là một trình lặp. Do đó, nó hỗ trợ hàm next () cũng có thể được sử dụng để hiển thị tất cả các dòng trong tệp csv thay vìfor loop.

csvfile=open('persons.csv','r', newline='')
   obj=csv.reader(csvfile)
   while True:
   try:
      row=next(obj)
      print (row)
   except StopIteration:
      break

Như đã đề cập trước đó, mô-đun csv sử dụng Excel làm phương ngữ mặc định của nó. Mô-đun csv cũng định nghĩa một lớp phương ngữ. Phương ngữ là tập hợp các tiêu chuẩn được sử dụng để triển khai giao thức CSV. Danh sách các phương ngữ có sẵn có thể được lấy bằng hàm list_dialects ().

>>> csv.list_dialects()
['excel', 'excel-tab', 'unix']

Ngoài các tệp lặp, mô-đun csv có thể xuất một đối tượng từ điển sang tệp CSV và đọc nó để điền đối tượng từ điển Python. Với mục đích này, mô-đun này định nghĩa các lớp sau:

DictWriter ()

Hàm này trả về một đối tượng DictWriter. Nó tương tự như đối tượng nhà văn, nhưng các hàng được ánh xạ tới đối tượng từ điển. Hàm cần một đối tượng tệp có quyền ghi và danh sách các khóa được sử dụng trong từ điển dưới dạng tham số tên trường. Điều này được sử dụng để viết dòng đầu tiên trong tệp dưới dạng tiêu đề.

người viết ()

Phương thức này ghi danh sách các khóa trong từ điển dưới dạng một dòng được phân tách bằng dấu phẩy ở dòng đầu tiên trong tệp.

Trong ví dụ sau, một danh sách các mục từ điển được xác định. Mỗi mục trong danh sách là một từ điển. Sử dụng phương thức write (), chúng được ghi vào tệp theo cách phân cách bằng dấu phẩy.

persons=[
   {'name':'Lata', 'age':22, 'marks':45}, 
   {'name':'Anil', 'age':21, 'marks':56}, 
   {'name':'John', 'age':20, 'marks':60}
]
csvfile=open('persons.csv','w', newline='')
fields=list(persons[0].keys())
obj=csv.DictWriter(csvfile, fieldnames=fields)
obj.writeheader()
obj.writerows(persons)
csvfile.close()

Tệp people.csv hiển thị các nội dung sau:

name,age,marks
Lata,22,45
Anil,21,56
John,20,60

DictReader ()

Hàm này trả về một đối tượng DictReader từ tệp CSV bên dưới. Trong trường hợp, đối tượng reader, đối tượng này cũng là một trình lặp, sử dụng nội dung nào của tệp được truy xuất.

csvfile=open('persons.csv','r', newline='')
obj=csv.DictReader(csvfile)

Lớp cung cấp thuộc tính tên trường, trả về các khóa từ điển được sử dụng làm tiêu đề của tệp.

print (obj.fieldnames)
['name', 'age', 'marks']

Sử dụng vòng lặp qua đối tượng DictReader để tìm nạp các đối tượng từ điển riêng lẻ.

for row in obj:
   print (row)

Điều này dẫn đến kết quả sau:

OrderedDict([('name', 'Lata'), ('age', '22'), ('marks', '45')])
OrderedDict([('name', 'Anil'), ('age', '21'), ('marks', '56')])
OrderedDict([('name', 'John'), ('age', '20'), ('marks', '60')])

Để chuyển đổi đối tượng OrderedDict sang từ điển thông thường, trước tiên chúng ta phải nhập OrderedDict từ mô-đun bộ sưu tập.

from collections import OrderedDict
   r=OrderedDict([('name', 'Lata'), ('age', '22'), ('marks', '45')])
   dict(r)
{'name': 'Lata', 'age': '22', 'marks': '45'}