Trong Python, có một lớp Sniffer trong mô-đun csv có thể được sử dụng để đoán dấu phân cách và ký tự trích dẫn của tệp đã cho. chiến lược của nó được (trích dẫn từ docstrings csv.py của):
[Đầu tiên, nhìn] cho văn bản kèm theo giữa hai dấu ngoặc kép giống hệt (các quotechar có thể xảy ra) được trước và sau bởi cùng một ký tự (các có thể xảy ra delimiter). Ví dụ:
,'some text',
Trích dẫn có nhiều chiến thắng nhất, cùng với dấu tách. Nếu không có quotechar thì dấu phân cách không thể được xác định theo cách này.
Trong trường hợp đó, hãy thử như sau:
Delimiter nên xảy ra cùng một số lần trên mỗi hàng. Tuy nhiên, do dữ liệu không đúng định dạng, nó có thể không. Chúng tôi không muốn một cách tiếp cận tất cả hoặc không có gì, vì vậy chúng tôi cho phép các biến thể nhỏ trong số này .
- tạo bảng tần số mỗi ký tự trên mỗi dòng.
- tạo bảng tần suất tần suất (tần số meta?), Ví dụ: 'x xảy ra 5 lần trong 10 dòng, 6 lần trong 1000 dòng, 7 lần trong 2 hàng'
- sử dụng chế độ của siêu tần số để xác định dự kiến tần số cho rằng nhân vật
- tìm hiểu tần suất các nhân vật thực sự đáp ứng được mục tiêu đó
- nhân vật đáp ứng tốt nhất mục tiêu của nó là delimiter
Đối performan lý do ce, dữ liệu được đánh giá theo khối, vì vậy nó có thể thử và đánh giá phần nhỏ nhất của dữ liệu có thể, đánh giá khối bổ sung khi cần thiết.
Tôi sẽ không trích dẫn mã nguồn ở đây - nó nằm trong thư mục Lib của mọi cài đặt Python.
Hãy nhớ rằng CSV cũng có thể sử dụng dấu chấm phẩy thay vì dấu phẩy như delimiters (ví dụ như trong các phiên bản Đức của Excel, CSV được dấu chấm phẩy được phân định bởi vì dấu phẩy được sử dụng như dải phân cách thập phân ở Đức ...)
Nguồn
2009-04-17 21:40:48
Hiển thị cho người dùng kết quả trước khi nhập là một bước đi tốt mà tôi nghĩ, nhưng việc đoán thông minh cũng là điều tuyệt vời đối với chúng tôi. Vì vậy, sự kết hợp thực sự tốt đẹp! – BerggreenDK
một đề xuất-Nếu bạn đang làm một cửa sổ xem trước và bạn muốn "đoán" đó là dấu phân cách chính xác, sau đó bạn có thể chia trên một delim có thể. và xem liệu mười dòng đầu tiên có cùng số trường hay không, so sánh với tất cả các delims bình thường khác. Đó là một cược tốt có thể hoạt động với cùng một số trường trong suốt quá trình. Như [Jon Skeet đã nói] (https://stackoverflow.com/questions/761932/how-should-i-detect-which-delimiter-is-used-in-a-text-file/761949#761949) nó hoàn toàn có thể đó là một tab được phân cách bằng dấu phẩy và dấu phẩy hợp lệ, nhưng tab đó là lựa chọn dự định. – PsychoData