Hướng dẫn how to find delimiter in text file python - cách tìm dấu phân cách trong tệp văn bản python

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 tìm thấy dấu phân cách của một chuỗi?

Bạn có thể sử dụng hàm std :: String :: find () để tìm vị trí của dấu phân cách chuỗi của bạn, sau đó sử dụng std :: string :: substr () để nhận mã thông báo. Hàm tìm (chuỗi const & str, size_t pos = 0) trả về vị trí của lần xuất hiện đầu tiên của str trong chuỗi hoặc npos nếu không tìm thấy chuỗi.

Phân phối trong tệp văn bản là gì?

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;

Hướng dẫn how to find delimiter in text file python - cách tìm dấu phân cách trong tệp văn bản python

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;

Hướng dẫn how to find delimiter in text file python - cách tìm dấu phân cách trong tệp văn bản python

Làm việc với Detect () và mặc định


Làm thế nào để Python phát hiện dấu phân cách?

Installation..
Cú pháp: Phát hiện (văn bản: str, văn bản: str, default = none, whitelist = [',', ';', ':', '|', '\ t'], blacklist = none).
Văn bản: Chuỗi đầu vào để kiểm tra cho dấu phân cách ..
Mặc định: Giá trị mặc định cho đầu ra trong trường hợp không tìm thấy dấu phân cách hợp lệ nào ..

Làm thế nào để bạn xác định Delimiters?

Có cách nào đơn giản để phát hiện dấu phân cách nào được sử dụng không?Một cách sẽ là đọc trong mỗi dòng và đếm cả tab và dấu phẩy và tìm ra cái nào được sử dụng nhất quán trong mỗi dòng.Tất nhiên, dữ liệu có thể bao gồm dấu phẩy hoặc tab, do đó có thể nói dễ hơn làm.read in every line and count both tabs and commas and find out which is most consistently used in every line. Of course, the data could include commas or tabs, so that may be easier said than done.

Làm thế nào để bạn tìm thấy dấu phân cách của một chuỗi?

Bạn có thể sử dụng hàm std :: String :: find () để tìm vị trí của dấu phân cách chuỗi của bạn, sau đó sử dụng std :: string :: substr () để nhận mã thông báo.Hàm tìm (chuỗi const & str, size_t pos = 0) trả về vị trí của lần xuất hiện đầu tiên của str trong chuỗi hoặc npos nếu không tìm thấy chuỗi.use the std::string::find() function to find the position of your string delimiter, then use std::string::substr() to get a token. The find(const string& str, size_t pos = 0) function returns the position of the first occurrence of str in the string, or npos if the string is not found.

Phân phối trong tệp văn bản là gì?

Bất kỳ ký tự nào cũng có thể được sử dụng để phân tách các giá trị, nhưng các dấu phân cách phổ biến nhất là dấu phẩy, tab và ruột kết.Thanh dọc (còn được gọi là ống) và không gian đôi khi cũng được sử dụng.comma, tab, and colon. The vertical bar (also referred to as pipe) and space are also sometimes used.