Có nhiều cách để người ta có thể tìm thấy số lượng bản ghi từ tệp CSV bằng Python. Bài viết này mô tả 6 cách khác nhau và khám phá phương pháp hiệu quả để kết nối với điện toán phân tán bằng Pandas và Koalas
Ảnh của Sigmund trên Bapt
Trong khi tôi đang viết bài "Chia một tệp CSV lớn một cách ngẫu nhiên hoặc bằng nhau thành các tệp nhỏ hơn", tôi đã sử dụng một vài phương pháp để tìm số dòng trong một tệp nhất định. Điều đó khiến tôi tò mò muốn xem phương pháp tốt nhất để tìm số dòng trong tệp đã cho
Hãy xem xét 6 phương pháp khác nhau [có thể có nhiều cách hơn để giải quyết vấn đề này], đây đều là những phương pháp cơ bản mà bất kỳ ai cũng có thể hiểu và sử dụng
Phương pháp1. Đếm số lượng bản ghi bằng cách sử dụng liệt kê và vòng lặp python
Trong phương pháp này, trước tiên hãy mở tệp ở chế độ đọc và lặp qua nội dung tệp được liệt kê, khi vòng lặp hoàn thành lần lặp cuối cùng bao gồm line_count
def count_lines_enumrate[file_name]:
fp = open[file_name,'r']
for line_count, line in enumerate[fp]:
pass
return line_count
Phương pháp2. Đếm số lượng bản ghi bằng cách sử dụng liệt kê và danh sách python
Trong phương pháp này, trước tiên hãy mở tệp ở chế độ đọc và chuyển đổi kết quả liệt kê thành danh sách và trích xuất phần tử cuối cùng của danh sách
def count_lines_enumrate[file_name]:
fp = open[file_name,'r']
line_count = list[enumerate[fp]][-1][0]
return line_count
Phương pháp3. Đếm số bản ghi bằng python sum 1 cho mỗi dòng
Trong phương pháp này, mở tệp ở chế độ đọc và chức năng tính tổng giống như hiểu danh sách
def count_line_sum[file_name]:
fp = open[file_name,'r']
line_count = sum[1 for line in fp]
return line_count
Phương pháp4. Đếm số lượng bản ghi bằng cách sử dụng phương pháp tệp đọc dòng
Trong phương pháp này, mở tệp ở chế độ đọc và độ dài của danh sách được tạo bởi phương pháp tệp dòng đọc
def count_lines_readlines[file_name]:
fp = open[file_name,'r']
line_count = len[fp.readlines[]]
return line_count
Phương pháp5. Đếm số bản ghi bằng python cơ bản bằng cách sử dụng các dòng đếm
Trong phương pháp này, hãy mở tệp ở chế độ đọc và lặp qua từng dòng một và tăng số đếm cho đến khi tất cả các dòng được lặp
def count_lines_traditional[file_name]:
fp = open[file_name,'r']
line_count = 0
for line in fp:
line_count += 1
return line_count
Phương pháp6. Đếm số lượng hồ sơ sử dụng gấu trúc
Trong phương pháp này, hãy sử dụng phương pháp pandas read_csv để đọc tệp và tìm độ dài của chỉ mục khung dữ liệu
import pandas
def count_lines_pandas[file_name]:
df = pd.read_csv[file_name, header=0]
return len[df.index]
Tôi đã thử nghiệm tất cả 6 phương pháp này trong máy của mình để tìm ra chức năng nào hoạt động tốt nhất. Trong hầu hết các chức năng này, trình đọc tệp đi qua tất cả các dòng và lưu trong bộ nhớ ngoại trừ phương thức liệt kê
Tôi đã thử nghiệm các đoạn mã này với tập dữ liệu sau
Kích thước tệp và số lượng bản ghi
Hãy xem kết quả
Thời gian thực hiện của tất cả các phương pháp trên
Phương pháp-1 vượt trội hơn tất cả các chức năng dòng đếm khác. Điều này là do thực tế là, liệt kê không đi qua các dòng và thực hiện thêm bất kỳ thao tác nào để đếm dữ liệu
Đáng ngạc nhiên, phương pháp gấu trúc hoạt động kém nhất đối với tất cả các kích thước tệp. Tuy nhiên, với phiên bản mới nhất của Spark 3. 2 pandas cũng hỗ trợ tính toán phân tán và đọc dữ liệu nhanh hơn nhiều như spark
Một cột của tệp CSV chứa nhiều giá trị có thể có và tôi muốn tìm 5 giá trị phổ biến nhất. Một vài mã python có thể giúp tôi hoàn thành
Ví dụ về tệp CSV
Giả sử tệp CSV có tên là "test_data. csv" và nội dung của nó là
"date","url","method","status_code","bytes"
"Jun 18, 2022","/posts/find_biggest_files",GET,200,"2.7KB"
"Jun 18, 2022","/posts/gunicorn_concurrency",GET,200,3KB
"Jun 18, 2022","/posts/gunicorn_concurrency",GET,301,169B
"Jun 18, 2022","/posts/auto_sqlalchemy_models",GET,200,"2.2KB"
"Jun 18, 2022","/posts/python_memcached",GET,200,"2.4KB"
"Jun 18, 2022","/posts/python_memcached",GET,200,"2.4KB"
"Jun 17, 2022","/posts/dynamic_table",GET,200,"2.9KB"
"Jun 17, 2022","/posts/python_sys_path",GET,200,"2.3KB"
"Jun 17, 2022","/posts/dynamic_table",GET,200,"2.9KB"
"Jun 17, 2022","/posts/gunicorn_concurrency",GET,200,3KB
"Jun 17, 2022","/posts/gunicorn_concurrency",GET,301,169B
"Jun 17, 2022","/posts/vscode_flake8_line_width",GET,200,"2.3KB"
"Jun 17, 2022","/posts/vscode_flake8_line_width",GET,301,169B
"Jun 17, 2022","/posts/dynamic_table",GET,200,"2.9KB"
"Jun 17, 2022","/posts/aws_content_type",GET,200,"2.2KB"
"Jun 17, 2022","/posts/curl_upload_flask",GET,200,"2.7KB"
"Jun 17, 2022","/posts/dynamic_table",GET,200,"2.9KB"
"Jun 17, 2022","/posts/es_less_mem",GET,200,"2.2KB"
"Jun 17, 2022","/posts/dynamic_table",GET,200,"2.9KB"
Trên thực tế, đó là một phần trong tệp nhật ký của easydevguide.com
. Tôi muốn tìm 5 url thường xuyên nhất trong tệp này. url
là cột thứ hai của tệp CSV này