Đô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=';']
0with 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=';']
1with 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=';']
2print
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=';']
4with 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=';']
5with 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=';']
6print
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=';']
0with 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=';']
9with 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=';']
2print
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=';']
4with 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=';']
3with 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=';']
6print
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=';']
0with 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=';']
7with 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=';']
2print
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=';']
4with 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=';']
3166 14908941 sa_s NOVA i 7.05 DEa 7.17 Ncava - Deo mo 7161 4,97
2166 14908941 sa_s NOVA i 7.05 DEa 7.17 Ncava - Deo mo 7161 4,97
3166 14908941 sa_s NOVA i 7.05 DEa 7.17 Ncava - Deo mo 7161 4,97
4with 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=';']
0with 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=';']
6with 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=';']
2print
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=';']
4from
0with 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=';']
6print
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=';']
0from
4with 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=';']
2print
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=';']
4from
8from
9detect_delimiter
0detect_delimiter
1
166 14908941 sa_s NOVA i 7.05 DEa 7.17 Ncava - Deo mo 7161 4,97
3detect_delimiter
3166 14908941 sa_s NOVA i 7.05 DEa 7.17 Ncava - Deo mo 7161 4,97
4detect_delimiter
5detect_delimiter
6detect_delimiter
7print
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=';']
0import
0with 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=';']
2print
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=';']
4from
8from
9detect_delimiter
0import
7
166 14908941 sa_s NOVA i 7.05 DEa 7.17 Ncava - Deo mo 7161 4,97
3detect_delimiter
3166 14908941 sa_s NOVA i 7.05 DEa 7.17 Ncava - Deo mo 7161 4,97
4detect_delimiter
5detect
2detect_delimiter
5detect
4detect_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=';']