Mô tả dự án
Pygount là một công cụ dòng lệnh để quét các thư mục cho các tệp mã nguồn và đếm số lượng dòng mã nguồn trong đó. Nó tương tự như các công cụ như Sloccount và CLOC nhưng sử dụng gói pygments để phân tích mã nguồn và do đó có thể phân tích bất kỳ ngôn ngữ lập trình nào được hỗ trợ bởi pygments.
Tên này là sự kết hợp của pygments và đếm.
Pygount là nguồn mở và được phân phối theo giấy phép BSD. Mã nguồn có sẵn từ //github.com/roskakori/pygount.
Bắt đầu nhanh
Để cài đặt chạy
$ pip install pygount
Để có được danh sách số lượng dòng cho một dự án được lưu trữ trong một thư mục nhất định chạy chẳng hạn:
$ pygount ~/projects/example
Để giới hạn phân tích ở một số loại tệp được xác định bởi hậu tố của chúng:
$ pygount --suffix=cfg,py,yml ~/projects/example
Để có được một bản tóm tắt của từng ngôn ngữ lập trình với số lượng và tỷ lệ phần trăm:
$ pygount --format=summary ~/projects/example
Như một ví dụ ở đây là đầu ra tóm tắt cho mã nguồn riêng của Pygount:
Language Files % Code % Comment %
---------------- ----- ------ ---- ------ ------- ------
Python 19 51.35 1924 72.99 322 86.10
reStructuredText 7 18.92 332 12.59 7 1.87
markdown 3 8.11 327 12.41 1 0.27
Batchfile 1 2.70 24 0.91 1 0.27
YAML 1 2.70 11 0.42 2 0.53
Makefile 1 2.70 9 0.34 7 1.87
INI 1 2.70 5 0.19 0 0.00
TOML 1 2.70 4 0.15 0 0.00
Text 3 8.11 0 0.00 34 9.09
---------------- ----- ------ ---- ------ ------- ------
Sum total 37 2636 374
Rất nhiều công cụ có thể đăng thông tin SLOC quy trình, ví dụ như trình cắm sloccount cho máy chủ tích hợp liên tục Jenkins.
Một định dạng phổ biến cho các công cụ như vậy là định dạng XML được sử dụng bởi CLOC, mà Pygount cũng hỗ trợ và có thể lưu trữ trong một tệp đầu ra:
$ pygount --format=cloc-xml --out=cloc.xml ~/projects/example
Để có được một mô tả ngắn về tất cả các tùy chọn dòng lệnh có sẵn, hãy sử dụng:
$ pygount --help
Để biết thêm thông tin và ví dụ đọc chương tài liệu về việc sử dụng.
Đóng góp
Để báo cáo lỗi, hãy truy cập trình theo dõi vấn đề.
Trong trường hợp bạn muốn chơi với mã nguồn hoặc cải tiến đóng góp, hãy xem đóng góp.
Lịch sử phiên bản
Xem các thay đổi.
Tải tập tin
Tải xuống tệp cho nền tảng của bạn. Nếu bạn không chắc chắn nên chọn cái nào, hãy tìm hiểu thêm về việc cài đặt các gói.
Phân phối nguồn
Phân phối xây dựng
Đếm các dòng trong một tệp
Tín dụng: Luther Blissett
Vấn đề
Bạn cần tính toán số lượng dòng trong một tệp.
Dung dịch
Cách tiếp cận đơn giản nhất, đối với các tệp có kích thước hợp lý, là đọc tệp dưới dạng danh sách các dòng để số lượng dòng là độ dài của danh sách. Nếu đường dẫn của tệp trên một chuỗi liên kết với biến
$ pygount ~/projects/example4, thì đó chỉ là:
count = len[open[thefilepath].readlines[ ]]
Đối với một tập tin thực sự lớn, điều này có thể rất chậm hoặc thậm chí không hoạt động. Nếu bạn phải lo lắng về các tệp hài hước, một vòng lặp sử dụng phương thức
$ pygount ~/projects/example5 luôn hoạt động:
count = 0 for line in open[thefilepath].xreadlines[ ]: count += 1
Ở đây, một sự thay thế hơi khó khăn, nếu bộ hủy dòng là
$ pygount ~/projects/example6 [hoặc có
$ pygount ~/projects/example6 dưới dạng phụ, như xảy ra trên Windows]:
count = 0 thefile = open[thefilepath, 'rb'] while 1: buffer = thefile.read[8192*1024] if not buffer: break count += buffer.count['\n'] thefile.close[ ]
Nếu không có đối số
$ pygount ~/projects/example8 cho
$ pygount ~/projects/example9, điều này sẽ hoạt động ở bất cứ đâu, nhưng hiệu suất có thể bị ảnh hưởng rất nhiều trên các nền tảng Windows hoặc Macintosh.
Thảo luận
Nếu bạn có một chương trình bên ngoài đếm các dòng tệp, chẳng hạn như
$ pygount --suffix=cfg,py,yml ~/projects/example
0 trên các nền tảng giống UNIX, tất nhiên bạn có thể chọn sử dụng điều đó [ví dụ: thông qua $ pygount --suffix=cfg,py,yml ~/projects/example
1]. Tuy nhiên, nó nói chung đơn giản hơn, nhanh hơn và di động hơn để thực hiện việc đếm dòng trong chương trình của bạn. Bạn có thể dựa vào hầu hết tất cả các tệp văn bản có kích thước hợp lý, để đọc toàn bộ tệp vào bộ nhớ cùng một lúc là khả thi. Đối với tất cả các tệp bình thường như vậy, $ pygount --suffix=cfg,py,yml ~/projects/example
2 về kết quả của $ pygount --suffix=cfg,py,yml ~/projects/example
3 cung cấp cho bạn số lượng dòng theo cách đơn giản nhất.Nếu tệp lớn hơn bộ nhớ có sẵn [giả sử, vài trăm megabyte trên một PC điển hình ngày nay], giải pháp đơn giản nhất có thể trở nên chậm, vì hệ điều hành đấu tranh để phù hợp với nội dung tệp vào bộ nhớ ảo. Nó thậm chí có thể thất bại, khi không gian hoán đổi hết và bộ nhớ ảo có thể giúp đỡ nữa. Trên một PC điển hình, với 256 MB RAM và không gian đĩa hầu như không giới hạn, bạn vẫn nên mong đợi các vấn đề nghiêm trọng khi bạn cố gắng đọc vào các tệp bộ nhớ của, giả sử, 1 hoặc 2 GB, tùy thuộc vào hệ điều hành của bạn [một số hệ điều hành là nhiều mong manh hơn những người khác trong việc xử lý các vấn đề bộ nhớ ảo trong các điều kiện tải quá mức như vậy]. Trong trường hợp này, phương thức
$ pygount ~/projects/example5 của các đối tượng tệp, được giới thiệu trong Python 2.1, nói chung là một cách tốt để xử lý các tệp văn bản từng dòng. Trong Python 2.2, bạn có thể làm tốt hơn nữa, về cả sự rõ ràng và tốc độ, bằng cách lặp trực tiếp trên đối tượng tệp:
$ pygount ~/projects/example0
Tuy nhiên,
$ pygount ~/projects/example5 không trả về một chuỗi và cũng không có vòng lặp trực tiếp trên đối tượng tệp, vì vậy bạn có thể chỉ sử dụng
$ pygount --suffix=cfg,py,yml ~/projects/example
2 trong những trường hợp này để có được số lượng dòng. Thay vào đó, bạn phải lặp và đếm từng dòng, như thể hiện trong giải pháp.Đếm các ký tự thiết bị đầu cuối dòng trong khi đọc tệp theo byte, trong các khối có kích thước hợp lý, là ý tưởng chính trong cách tiếp cận thứ ba. Nó có lẽ ít trực quan nhất ngay lập tức, và nó không hoàn toàn đa nền tảng, nhưng bạn có thể hy vọng rằng nó nhanh nhất [ví dụ, bằng cách tương tự với Công thức 8.2 trong cuốn sách nấu ăn Perl].Perl Cookbook].
Tuy nhiên, hãy nhớ rằng, trong hầu hết các trường hợp, hiệu suất không thực sự quan trọng đến thế. Khi nó quan trọng, thời gian chìm có thể không phải là những gì mà trực giác của bạn nói với bạn, vì vậy bạn không bao giờ nên tin vào trực giác của mình trong vấn đề này, thay vào đó, luôn luôn là điểm chuẩn và đo lường. Ví dụ: tôi đã lấy một tệp syslog UNIX điển hình có kích thước trung gian, một chút hơn 18 MB văn bản trong 230.000 dòng:
$ pygount ~/projects/example1
và tôi đã thiết lập tập lệnh khung điểm chuẩn sau,
$ pygount --suffix=cfg,py,yml ~/projects/example
7:$ pygount ~/projects/example2
Đầu tiên, tôi in số lượng dòng thu được bằng tất cả các phương pháp, do đó đảm bảo rằng không có sự bất thường hay lỗi nào [đếm các tác vụ nổi tiếng dễ bị lỗi]. Sau đó, tôi chạy từng phương án 10 lần, dưới sự kiểm soát của hàm thời gian
$ pygount --suffix=cfg,py,yml ~/projects/example
8 và xem xét kết quả. Họ đây rồi:$ pygount ~/projects/example3
Như bạn có thể thấy, sự khác biệt về hiệu suất hầu như không quan trọng: chênh lệch 10% hoặc hơn trong một nhiệm vụ phụ trợ là điều mà người dùng của bạn thậm chí sẽ không bao giờ nhận thấy. Tuy nhiên, cách tiếp cận nhanh nhất [đối với hoàn cảnh cụ thể của tôi, PC rẻ nhưng rất gần đây chạy phân phối Linux phổ biến, cũng như điểm chuẩn cụ thể này] Điều đó đếm các thiết bị kết thúc dòng bằng các khối. Trong thực tế, trừ khi tôi phải lo lắng về các tập tin của hàng trăm megabyte, tôi đã luôn sử dụng phương pháp đơn giản nhất [tức là, cái đầu tiên được trình bày trong công thức này].
Xem thêm
Phần tham chiếu thư viện trên các đối tượng tệp và mô -đun
$ pygount --suffix=cfg,py,yml ~/projects/example
9; Perl Cookbook Recipe 8.2.Library Reference section on file objects and the $ pygount --suffix=cfg,py,yml ~/projects/example
9 module; Perl Cookbook Recipe 8.2.