Mô -đun
a,b,c
1,2,3
4,5,6
7,8,9
0 xử lý các tệp CSV theo hàng. Nếu bạn muốn xử lý nó theo cột, a,b,c
1,2,3
4,5,6
7,8,9
1 là một giải pháp tốt.Bên cạnh đó, có 2 cách để có được tất cả [hoặc cụ thể] với mã Python đơn giản thuần túy.
1. CSV.Dictreader
with open['demo.csv'] as file:
data = {}
for row in csv.DictReader[file]:
for key, value in row.items[]:
if key not in data:
data[key] = []
data[key].append[value]
Nó rất dễ hiểu.
2. CSV.Reader với zip
with open['demo.csv'] as file:
data = {values[0]: values[1:] for values in zip[*csv.reader[file]]}
Điều này không rõ ràng lắm, nhưng hiệu quả.
a,b,c
1,2,3
4,5,6
7,8,9
2 Chuyển đổi a,b,c
1,2,3
4,5,6
7,8,9
3, trong khi a,b,c
1,2,3
4,5,6
7,8,9
4, a,b,c
1,2,3
4,5,6
7,8,9
5, a,b,c
1,2,3
4,5,6
7,8,9
6 là danh sách. a,b,c
1,2,3
4,5,6
7,8,9
7 Tạo a,b,c
1,2,3
4,5,6
7,8,9
3 cho a,b,c
1,2,3
4,5,6
7,8,9
9, với tên cột.Kết quả demo
Nội dung của
>>> print[data]
{'c': ['3', '6', '9'], 'b': ['2', '5', '8'], 'a': ['1', '4', '7']}
0:a,b,c
1,2,3
4,5,6
7,8,9
Kết quả của 1:
>>> print[data]
{'c': ['3', '6', '9'], 'b': ['2', '5', '8'], 'a': ['1', '4', '7']}
Kết quả của 2:
>>> print[data]
{'c': ['3', '6', '9'], 'b': ['2', '5', '8'], 'a': ['1', '4', '7']}
Trong bài viết này, chúng tôi sẽ thảo luận về cách đọc một dòng tệp CSV theo dòng có hoặc không có tiêu đề. Đồng thời chọn các cột cụ thể trong khi lặp qua dòng tệp CSV từng dòng. Giả sử chúng ta có một tập tin CSV sinh viên.csv và nội dung của nó là,students.csv and its contents are, Chúng tôi muốn đọc tất cả các hàng của dòng tệp CSV này từng dòng và xử lý từng dòng tại một thời điểm.Id,Name,Course,City,Session
21,Mark,Python,London,Morning
22,John,Python,Tokyo,Evening
23,Sam,Python,Paris,Morning
32,Shaun,Java,Tokyo,Morning
Ngoài ra, lưu ý rằng, ở đây chúng tôi không muốn đọc tất cả các dòng vào danh sách danh sách và sau đó lặp lại nó, bởi vì đó sẽ không phải là một giải pháp hiệu quả cho tệp CSV lớn, tức là tệp có kích thước tính bằng GBS. Chúng tôi đang tìm kiếm các giải pháp trong đó chúng tôi đọc và xử lý chỉ một dòng tại một thời điểm trong khi lặp qua tất cả các hàng CSV, do đó, bộ nhớ tối thiểu được sử dụng.
Hãy để xem cách làm điều này,
Quảng cáo
Python có mô -đun CSV, cung cấp hai lớp khác nhau để đọc nội dung của tệp CSV, tức là CSV.Reader và CSV.DicTreader. Hãy để thảo luận và sử dụng từng cái một để đọc từng dòng tệp CSV, từng dòng,
Đọc từng dòng tệp CSV bằng CSV.Reader
Với đối tượng lớp đọc mô -đun CSV, chúng tôi có thể lặp lại các dòng của tệp CSV dưới dạng danh sách các giá trị, trong đó mỗi giá trị trong danh sách là giá trị ô. Hãy để hiểu với một ví dụ,
from csv import reader # open file in read mode with open['students.csv', 'r'] as read_obj: # pass the file object to reader[] to get the reader object csv_reader = reader[read_obj] # Iterate over each row in the csv using reader object for row in csv_reader: # row variable is a list that represents a row in csv print[row]
Đầu ra:
['Id', 'Name', 'Course', 'City', 'Session'] ['21', 'Mark', 'Python', 'London', 'Morning'] ['22', 'John', 'Python', 'Tokyo', 'Evening'] ['23', 'Sam', 'Python', 'Paris', 'Morning'] ['32', 'Shaun', 'Java', 'Tokyo', 'Morning']
Nó lặp lại trên tất cả các hàng của tập tin sinh viên.csv. Đối với mỗi hàng, nó lấy nội dung của hàng đó dưới dạng danh sách và in danh sách đó.
Nó hoạt động như thế nào?
Nó thực hiện các bước sau,
- Mở tệp ‘sinh viên.csv, trong chế độ đọc và tạo đối tượng tệp.
- Tạo một đối tượng đầu đọc [iterator] bằng cách chuyển đối tượng tệp trong hàm csv.Reader [].
- Bây giờ một khi chúng ta có đối tượng đầu đọc này, đó là một trình lặp, sau đó sử dụng trình lặp này với vòng lặp để đọc các hàng riêng lẻ của CSV làm danh sách các giá trị. Trong đó mỗi giá trị trong danh sách đại diện cho một ô riêng lẻ.
Bằng cách này, chỉ có một dòng trong bộ nhớ tại một thời điểm trong khi lặp qua tệp CSV, điều này làm cho nó trở thành một giải pháp hiệu quả bộ nhớ.
Trong ví dụ trước, chúng tôi đã lặp lại tất cả các hàng của tệp CSV bao gồm cả tiêu đề. Nhưng giả sử chúng tôi muốn bỏ qua tiêu đề và lặp qua các hàng còn lại của tệp CSV. Hãy để xem cách làm điều đó,
Let’s see how to do that,
from csv import reader # skip first line i.e. read header first and then iterate over each row od csv as a list with open['students.csv', 'r'] as read_obj: csv_reader = reader[read_obj] header = next[csv_reader] # Check file as empty if header != None: # Iterate over each row after the header in the csv for row in csv_reader: # row variable is a list that represents a row in csv print[row]
Đầu ra:
['21', 'Mark', 'Python', 'London', 'Morning'] ['22', 'John', 'Python', 'Tokyo', 'Evening'] ['23', 'Sam', 'Python', 'Paris', 'Morning'] ['32', 'Shaun', 'Java', 'Tokyo', 'Morning'] Header was: ['Id', 'Name', 'Course', 'City', 'Session']
Nó lặp lại trên tất cả các hàng của tập tin sinh viên.csv. Đối với mỗi hàng, nó lấy nội dung của hàng đó dưới dạng danh sách và in danh sách đó.
Nó hoạt động như thế nào?
Nó thực hiện các bước sau,
Mở tệp ‘sinh viên.csv, trong chế độ đọc và tạo đối tượng tệp.
Tạo một đối tượng đầu đọc [iterator] bằng cách chuyển đối tượng tệp trong hàm csv.Reader [].
for each row a dictionary is returned, which contains the pair of column names and cell values for that row.
Let’s understand with an example,
with open['demo.csv'] as file:
data = {values[0]: values[1:] for values in zip[*csv.reader[file]]}
0Đầu ra:
with open['demo.csv'] as file:
data = {values[0]: values[1:] for values in zip[*csv.reader[file]]}
1Nó lặp lại trên tất cả các hàng của tập tin sinh viên.csv. Đối với mỗi hàng, nó lấy nội dung của hàng đó dưới dạng danh sách và in danh sách đó.
Nó hoạt động như thế nào?
Nó thực hiện các bước sau,
- Mở tệp ‘sinh viên.csv, trong chế độ đọc và tạo đối tượng tệp.
- Tạo một đối tượng đầu đọc [iterator] bằng cách chuyển đối tượng tệp trong hàm csv.Reader [].
- Bây giờ một khi chúng ta có đối tượng đầu đọc này, đó là một trình lặp, sau đó sử dụng trình lặp này với vòng lặp để đọc các hàng riêng lẻ của CSV làm danh sách các giá trị. Trong đó mỗi giá trị trong danh sách đại diện cho một ô riêng lẻ.
Nó là một giải pháp hiệu quả bộ nhớ, bởi vì tại một thời điểm chỉ có một dòng trong bộ nhớ.
Nhận tên cột từ tiêu đề trong tệp CSV
Lớp DicTreader có chức năng thành viên trả về tên cột của tệp CSV làm danh sách. Hãy để xem cách sử dụng nó,
let’s see how to use it,
with open['demo.csv'] as file:
data = {values[0]: values[1:] for values in zip[*csv.reader[file]]}
2Đầu ra:
with open['demo.csv'] as file:
data = {values[0]: values[1:] for values in zip[*csv.reader[file]]}
3Đọc các cột cụ thể từ tệp CSV trong khi lặp lại từng dòng
Đọc các cột cụ thể [theo tên cột] trong tệp CSV trong khi lặp lại từng hàng
Lặp lại trên tất cả các hàng của tập tin học sinh.csv từng dòng, nhưng chỉ in hai cột cho mỗi hàng,
with open['demo.csv'] as file:
data = {values[0]: values[1:] for values in zip[*csv.reader[file]]}
4Đầu ra:
with open['demo.csv'] as file:
data = {values[0]: values[1:] for values in zip[*csv.reader[file]]}
5Đọc các cột cụ thể từ tệp CSV trong khi lặp lại từng dòng
Đọc các cột cụ thể [theo tên cột] trong tệp CSV trong khi lặp lại từng hàng
Lặp lại trên tất cả các hàng của tập tin học sinh.csv từng dòng, nhưng chỉ in hai cột cho mỗi hàng,
with open['demo.csv'] as file:
data = {values[0]: values[1:] for values in zip[*csv.reader[file]]}
6Đầu ra:
with open['demo.csv'] as file:
data = {values[0]: values[1:] for values in zip[*csv.reader[file]]}
7Đọc các cột cụ thể từ tệp CSV trong khi lặp lại từng dòng
Đọc các cột cụ thể [theo tên cột] trong tệp CSV trong khi lặp lại từng hàng
with open['demo.csv'] as file:
data = {values[0]: values[1:] for values in zip[*csv.reader[file]]}
8Output:
with open['demo.csv'] as file:
data = {values[0]: values[1:] for values in zip[*csv.reader[file]]}
9