Hướng dẫn how does python detect delimiter in a text file? - python phát hiện dấu phân cách trong tệp văn bản như thế nào?

Đôi khi trong khi làm việc với một kho văn bản lớn, chúng ta có thể gặp vấn đề trong đó chúng ta cố gắng tìm nhân vật nào đang hoạt động như một dấu phân cách. Đây có thể là một tiện ích thú vị và hữu ích trong khi làm việc với một lượng dữ liệu khổng lồ và đánh giá dấu phân cách. Một cách để giải quyết vấn đề này được thảo luận trong bài viết này bằng thư viện Python của Detect_Delimiter.

Cài đặt

Để cài đặt mô -đun này, loại lệnh dưới đây trong thiết bị đầu cuối.

PIP Cài đặt Det_Delimiter

Bước đầu tiên là kiểm tra tất cả các ký tự màu trắng hiện diện trong văn bản đầu vào, nếu được tìm thấy, thì các ký tự đó được tính cho hầu hết các tần số và tối đa của một được trả về, bỏ qua tất cả từ danh sách danh sách đen nếu được cung cấp. Nếu không có dấu phân cách nào từ danh sách trắng, thì các ký tự tránh các ký tự danh sách đen được tính cho tần số tối đa, nếu được tìm thấy, ký tự đó được trả về dưới dạng dấu phân cách. & NBSP; được trả lại. & nbsp;

Cú pháp: Detect [Text: Str, Text: Str, Default = none, whitelist = [',', ';', ':', '|', '\ t'], blacklist = none] Văn bản: chuỗi đầu vào Để kiểm tra Delimiter.Default: & nbsp; Giá trị mặc định để đầu ra trong trường hợp không tìm thấy dấu phân cách hợp lệ nào .Whitelist: Bộ ký tự đầu tiên được kiểm tra cho các dấu phân cách, nếu chúng được tìm thấy, chúng được coi là phân định. Hữu ích trong các trường hợp người ta biết trong số các phân định là có thể. Mặc định là [',', ';', ':', '|', '\ t']. được gắn thẻ là người phân định, những thứ này sẽ được tránh trong kiểm tra. & nbsp;detect[text:str, text:str, default=None, whitelist=[‘,’, ‘;’, ‘:’, ‘|’, ‘\t’], blacklist=None]
text : The input string to test for delimiter.
default :  The default value to output in case no valid delimiter is found.
whitelist : The first set of characters to be checked for delimiters, if these are found, they are treated as delimiters. Useful in cases one knows out of which delimiters are possible. Defaults to [‘,’, ‘;’, ‘:’, ‘|’, ‘\t’].
blacklist : By default all digits, alphabets and full stop are not considered as blacklist, In case more values one needs to avoid being tagged as delimiters, these will get avoided in check. 

Ví dụ 1: Làm việc với Detect [] và mặc định

Trong đó, một vài ví dụ về việc phát hiện các dấu phân cách được thể hiện cùng với việc sử dụng mặc định. & NBSP;

Python3

from detect_delimiter import detect

print

with open[filename_input, 'r'] as f1, open[filename_output, 'wb'] as f2:
    #dialect = csv.Sniffer[].sniff[f1.read[1024]] #### detect delimiters  
    #f1.seek[0]
    r=csv.reader[f1, delimiter='\t' ]
    writer = csv.writer[f2,delimiter=';']
0
with open[filename_input, 'r'] as f1, open[filename_output, 'wb'] as f2:
    #dialect = csv.Sniffer[].sniff[f1.read[1024]] #### detect delimiters  
    #f1.seek[0]
    r=csv.reader[f1, delimiter='\t' ]
    writer = csv.writer[f2,delimiter=';']
1
with open[filename_input, 'r'] as f1, open[filename_output, 'wb'] as f2:
    #dialect = csv.Sniffer[].sniff[f1.read[1024]] #### detect delimiters  
    #f1.seek[0]
    r=csv.reader[f1, delimiter='\t' ]
    writer = csv.writer[f2,delimiter=';']
2

print

with open[filename_input, 'r'] as f1, open[filename_output, 'wb'] as f2:
    #dialect = csv.Sniffer[].sniff[f1.read[1024]] #### detect delimiters  
    #f1.seek[0]
    r=csv.reader[f1, delimiter='\t' ]
    writer = csv.writer[f2,delimiter=';']
4
with open[filename_input, 'r'] as f1, open[filename_output, 'wb'] as f2:
    #dialect = csv.Sniffer[].sniff[f1.read[1024]] #### detect delimiters  
    #f1.seek[0]
    r=csv.reader[f1, delimiter='\t' ]
    writer = csv.writer[f2,delimiter=';']
5
with open[filename_input, 'r'] as f1, open[filename_output, 'wb'] as f2:
    #dialect = csv.Sniffer[].sniff[f1.read[1024]] #### detect delimiters  
    #f1.seek[0]
    r=csv.reader[f1, delimiter='\t' ]
    writer = csv.writer[f2,delimiter=';']
6

print

with open[filename_input, 'r'] as f1, open[filename_output, 'wb'] as f2:
    #dialect = csv.Sniffer[].sniff[f1.read[1024]] #### detect delimiters  
    #f1.seek[0]
    r=csv.reader[f1, delimiter='\t' ]
    writer = csv.writer[f2,delimiter=';']
0
with open[filename_input, 'r'] as f1, open[filename_output, 'wb'] as f2:
    #dialect = csv.Sniffer[].sniff[f1.read[1024]] #### detect delimiters  
    #f1.seek[0]
    r=csv.reader[f1, delimiter='\t' ]
    writer = csv.writer[f2,delimiter=';']
9
with open[filename_input, 'r'] as f1, open[filename_output, 'wb'] as f2:
    #dialect = csv.Sniffer[].sniff[f1.read[1024]] #### detect delimiters  
    #f1.seek[0]
    r=csv.reader[f1, delimiter='\t' ]
    writer = csv.writer[f2,delimiter=';']
2

print

with open[filename_input, 'r'] as f1, open[filename_output, 'wb'] as f2:
    #dialect = csv.Sniffer[].sniff[f1.read[1024]] #### detect delimiters  
    #f1.seek[0]
    r=csv.reader[f1, delimiter='\t' ]
    writer = csv.writer[f2,delimiter=';']
4
with open[filename_input, 'r'] as f1, open[filename_output, 'wb'] as f2:
    #dialect = csv.Sniffer[].sniff[f1.read[1024]] #### detect delimiters  
    #f1.seek[0]
    r=csv.reader[f1, dialect="excel-tab"]
    writer = csv.writer[f2,delimiter=';']
3
with open[filename_input, 'r'] as f1, open[filename_output, 'wb'] as f2:
    #dialect = csv.Sniffer[].sniff[f1.read[1024]] #### detect delimiters  
    #f1.seek[0]
    r=csv.reader[f1, delimiter='\t' ]
    writer = csv.writer[f2,delimiter=';']
6

print

with open[filename_input, 'r'] as f1, open[filename_output, 'wb'] as f2:
    #dialect = csv.Sniffer[].sniff[f1.read[1024]] #### detect delimiters  
    #f1.seek[0]
    r=csv.reader[f1, delimiter='\t' ]
    writer = csv.writer[f2,delimiter=';']
0
with open[filename_input, 'r'] as f1, open[filename_output, 'wb'] as f2:
    #dialect = csv.Sniffer[].sniff[f1.read[1024]] #### detect delimiters  
    #f1.seek[0]
    r=csv.reader[f1, dialect="excel-tab"]
    writer = csv.writer[f2,delimiter=';']
7
with open[filename_input, 'r'] as f1, open[filename_output, 'wb'] as f2:
    #dialect = csv.Sniffer[].sniff[f1.read[1024]] #### detect delimiters  
    #f1.seek[0]
    r=csv.reader[f1, delimiter='\t' ]
    writer = csv.writer[f2,delimiter=';']
2

print

with open[filename_input, 'r'] as f1, open[filename_output, 'wb'] as f2:
    #dialect = csv.Sniffer[].sniff[f1.read[1024]] #### detect delimiters  
    #f1.seek[0]
    r=csv.reader[f1, delimiter='\t' ]
    writer = csv.writer[f2,delimiter=';']
4
with open[filename_input, 'r'] as f1, open[filename_output, 'wb'] as f2:
    #dialect = csv.Sniffer[].sniff[f1.read[1024]] #### detect delimiters  
    #f1.seek[0]
    r=csv.reader[f1, dialect="excel-tab"]
    writer = csv.writer[f2,delimiter=';']
3
166 14908941    sa_s    NOVA i  7.05    DEa 7.17    Ncava - Deo mo  7161    4,97
2
166 14908941    sa_s    NOVA i  7.05    DEa 7.17    Ncava - Deo mo  7161    4,97
3
166 14908941    sa_s    NOVA i  7.05    DEa 7.17    Ncava - Deo mo  7161    4,97
4
with open[filename_input, 'r'] as f1, open[filename_output, 'wb'] as f2:
    #dialect = csv.Sniffer[].sniff[f1.read[1024]] #### detect delimiters  
    #f1.seek[0]
    r=csv.reader[f1, delimiter='\t' ]
    writer = csv.writer[f2,delimiter=';']
6

Đầu ra: & nbsp;

Làm việc với Detect [] và mặc định

Ví dụ 2: Sử dụng các tham số danh sách đen và danh sách trắng

Cung cấp tham số Danh sách trắng ưu tiên bất kỳ dấu phân cách cụ thể nào ngay cả khi tần số của nó ít hơn DELIM không được phân định. Tham số danh sách đen có thể giúp bỏ qua bất kỳ dấu phân cách nào.

Python3

from detect_delimiter import detect

Đầu ra: & nbsp;

print

with open[filename_input, 'r'] as f1, open[filename_output, 'wb'] as f2:
    #dialect = csv.Sniffer[].sniff[f1.read[1024]] #### detect delimiters  
    #f1.seek[0]
    r=csv.reader[f1, delimiter='\t' ]
    writer = csv.writer[f2,delimiter=';']
0
with open[filename_input, 'r'] as f1, open[filename_output, 'wb'] as f2:
    dialect = csv.Sniffer[].sniff[f1.read[]] #### error with dialect = csv.Sniffer[].sniff[f1.read[1024]]  
    f1.seek[0]
    r=csv.reader[f1, delimiter=dialect ]
    writer = csv.writer[f2,delimiter=';']
6
with open[filename_input, 'r'] as f1, open[filename_output, 'wb'] as f2:
    #dialect = csv.Sniffer[].sniff[f1.read[1024]] #### detect delimiters  
    #f1.seek[0]
    r=csv.reader[f1, delimiter='\t' ]
    writer = csv.writer[f2,delimiter=';']
2

print

with open[filename_input, 'r'] as f1, open[filename_output, 'wb'] as f2:
    #dialect = csv.Sniffer[].sniff[f1.read[1024]] #### detect delimiters  
    #f1.seek[0]
    r=csv.reader[f1, delimiter='\t' ]
    writer = csv.writer[f2,delimiter=';']
4from0
with open[filename_input, 'r'] as f1, open[filename_output, 'wb'] as f2:
    #dialect = csv.Sniffer[].sniff[f1.read[1024]] #### detect delimiters  
    #f1.seek[0]
    r=csv.reader[f1, delimiter='\t' ]
    writer = csv.writer[f2,delimiter=';']
6

print

with open[filename_input, 'r'] as f1, open[filename_output, 'wb'] as f2:
    #dialect = csv.Sniffer[].sniff[f1.read[1024]] #### detect delimiters  
    #f1.seek[0]
    r=csv.reader[f1, delimiter='\t' ]
    writer = csv.writer[f2,delimiter=';']
0from4
with open[filename_input, 'r'] as f1, open[filename_output, 'wb'] as f2:
    #dialect = csv.Sniffer[].sniff[f1.read[1024]] #### detect delimiters  
    #f1.seek[0]
    r=csv.reader[f1, delimiter='\t' ]
    writer = csv.writer[f2,delimiter=';']
2

print

with open[filename_input, 'r'] as f1, open[filename_output, 'wb'] as f2:
    #dialect = csv.Sniffer[].sniff[f1.read[1024]] #### detect delimiters  
    #f1.seek[0]
    r=csv.reader[f1, delimiter='\t' ]
    writer = csv.writer[f2,delimiter=';']
4from8from9

detect_delimiter 0detect_delimiter 1

166 14908941    sa_s    NOVA i  7.05    DEa 7.17    Ncava - Deo mo  7161    4,97
3detect_delimiter 3
166 14908941    sa_s    NOVA i  7.05    DEa 7.17    Ncava - Deo mo  7161    4,97
4detect_delimiter 5detect_delimiter 6detect_delimiter 7

print

with open[filename_input, 'r'] as f1, open[filename_output, 'wb'] as f2:
    #dialect = csv.Sniffer[].sniff[f1.read[1024]] #### detect delimiters  
    #f1.seek[0]
    r=csv.reader[f1, delimiter='\t' ]
    writer = csv.writer[f2,delimiter=';']
0import0
with open[filename_input, 'r'] as f1, open[filename_output, 'wb'] as f2:
    #dialect = csv.Sniffer[].sniff[f1.read[1024]] #### detect delimiters  
    #f1.seek[0]
    r=csv.reader[f1, delimiter='\t' ]
    writer = csv.writer[f2,delimiter=';']
2

print

with open[filename_input, 'r'] as f1, open[filename_output, 'wb'] as f2:
    #dialect = csv.Sniffer[].sniff[f1.read[1024]] #### detect delimiters  
    #f1.seek[0]
    r=csv.reader[f1, delimiter='\t' ]
    writer = csv.writer[f2,delimiter=';']
4from8from9

detect_delimiter 0import7

166 14908941    sa_s    NOVA i  7.05    DEa 7.17    Ncava - Deo mo  7161    4,97
3detect_delimiter 3
166 14908941    sa_s    NOVA i  7.05    DEa 7.17    Ncava - Deo mo  7161    4,97
4detect_delimiter 5detect2detect_delimiter 5detect4detect_delimiter 7

Đầu ra: & nbsp;

Làm việc với Detect [] và mặc định


Tôi phải chuyển đổi một số tệp TXT thành CSV [và thực hiện một số hoạt động trong quá trình chuyển đổi].

Tôi sử dụng lớp csv.sniffer [] để phát hiện dấu phân cách được sử dụng trong txt

Mã này

with open[filename_input, 'r'] as f1, open[filename_output, 'wb'] as f2:
    dialect = csv.Sniffer[].sniff[f1.read[1024]] #### detect delimiters  
    f1.seek[0]
    r=csv.reader[f1, delimiter=dialect ]
    writer = csv.writer[f2,delimiter=';']

Trả về: Lỗi: Không thể xác định dấu phân cách

Công việc này

with open[filename_input, 'r'] as f1, open[filename_output, 'wb'] as f2:
    #dialect = csv.Sniffer[].sniff[f1.read[1024]] #### detect delimiters  
    #f1.seek[0]
    r=csv.reader[f1, delimiter='\t' ]
    writer = csv.writer[f2,delimiter=';']

hoặc

with open[filename_input, 'r'] as f1, open[filename_output, 'wb'] as f2:
    #dialect = csv.Sniffer[].sniff[f1.read[1024]] #### detect delimiters  
    #f1.seek[0]
    r=csv.reader[f1, dialect="excel-tab"]
    writer = csv.writer[f2,delimiter=';']

Đây là một ví dụ hàng TXT [10 bản ghi được phân định theo tab]

166 14908941    sa_s    NOVA i  7.05    DEa 7.17    Ncava - Deo mo  7161    4,97

Tại sao lớp csv.sniffer [] không hoạt động?

Lỗi chỉ được đọc 1024 byte để phân tích toàn bộ TXT [có thể điều này không đủ để phát hiện dấu phân cách]. Bây giờ mã này hoạt động mà không có chỉnh sửa nào khác:

with open[filename_input, 'r'] as f1, open[filename_output, 'wb'] as f2:
    dialect = csv.Sniffer[].sniff[f1.read[]] #### error with dialect = csv.Sniffer[].sniff[f1.read[1024]]  
    f1.seek[0]
    r=csv.reader[f1, delimiter=dialect ]
    writer = csv.writer[f2,delimiter=';']

Làm thế nào bạn có thể biết nếu một tệp văn bản là một dấu phân cách?

với một nhân vật như dấu phẩy [,].Nhân vật này được gọi là phân tách trường hoặc dấu phân cách.Khi bộ phân cách trường [DELIMITER] là dấu phẩy, tệp có định dạng được phân tách bằng dấu phẩy [CSV] hoặc được phân loại bằng dấu phẩy.Một dấu phân cách phổ biến khác là tab.. This character is called the field separator or delimiter. When the field separator [delimiter] is a comma, the file is in comma-separated [CSV] or comma-delimited format. Another popular delimiter is the tab.

Python sử dụng gì như một dấu phân cách?

Ví dụ: ký tự [=] bằng nhau đóng vai trò là dấu phân cách giữa tên và giá trị của một gán, trong khi ký tự dấu phẩy [,] được sử dụng để phân định các đối số cho một hàm, các phần tử trong danh sách và bộ dữ liệu, v.v.equal [=] character serves as a delimiter between the name and value of an assignment, whereas the comma [,] character is used to delimit arguments to a function, elements in lists and tuples, and so on.

Đâu là dấu phân cách trong tệp CSV python?

Bạn có thể thử thủ công một số mã hóa và trình phân cách phổ biến, hoặc xem tệp và cố gắng tìm ra nó, một cách tốt hơn nhiều là sử dụng mô-đun Chardet để tìm mã hóa cho bạn và sử dụng tham số tự động phát hiện để xác định dấu phân cách của tệp.use chardet module to find the encode for you and use auto-detect parameter to determine the delimiter of the file.

Chủ Đề