π ΠΠ°ΠΊ ΠΏΡΠΎΠ²Π΅ΡΠΈΡΡ ΠΊΠΎΠ΄ΠΈΡΠΎΠ²ΠΊΡ ΡΠ°ΠΉΠ»Π° python. ΠΠ°ΠΆΠ½ΡΠ΅ ΡΠ°Π³ΠΈ Π΄Π»Ρ ΡΠ²Π΅ΡΠ΅Π½Π½ΠΎΡΡΠΈ Π² ΠΏΡΠ°Π²ΠΈΠ»ΡΠ½ΠΎΠΉ ΠΊΠΎΠ΄ΠΈΡΠΎΠ²ΠΊΠ΅.
import chardet
def check_file_encoding(file_path):
with open(file_path, 'rb') as f:
result = chardet.detect(f.read())
return result['encoding']
file_path = 'ΠΏΡΡΡ_ΠΊ_Π²Π°ΡΠ΅ΠΌΡ_ΡΠ°ΠΉΠ»Ρ'
encoding = check_file_encoding(file_path)
print(f"ΠΠΎΠ΄ΠΈΡΠΎΠ²ΠΊΠ° ΡΠ°ΠΉΠ»Π°: {encoding}")
Π ΡΡΠΎΠΌ ΠΏΡΠΈΠΌΠ΅ΡΠ΅ ΠΌΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π»ΠΈ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΡ chardet, ΠΊΠΎΡΠΎΡΠ°Ρ Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΈ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ΅Ρ ΠΊΠΎΠ΄ΠΈΡΠΎΠ²ΠΊΡ ΡΠ°ΠΉΠ»Π°. ΠΡ ΠΎΡΠΊΡΡΠ²Π°Π΅ΠΌ ΡΠ°ΠΉΠ» Π² ΡΠ΅ΠΆΠΈΠΌΠ΅ ΡΡΠ΅Π½ΠΈΡ Π² Π±ΠΈΠ½Π°ΡΠ½ΠΎΠΌ ΡΠΎΡΠΌΠ°ΡΠ΅ ('rb') ΠΈ ΠΏΠ΅ΡΠ΅Π΄Π°Π΅ΠΌ Π΅Π³ΠΎ ΡΠΎΠ΄Π΅ΡΠΆΠΈΠΌΠΎΠ΅ Π² ΡΡΠ½ΠΊΡΠΈΡ detect() ΠΈΠ· Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ chardet. Π Π΅Π·ΡΠ»ΡΡΠ°ΡΠΎΠΌ Π±ΡΠ΄Π΅Ρ ΡΠ»ΠΎΠ²Π°ΡΡ Ρ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΠ΅ΠΉ ΠΎ ΠΊΠΎΠ΄ΠΈΡΠΎΠ²ΠΊΠ΅ ΡΠ°ΠΉΠ»Π°, ΠΈ ΠΌΡ Π²ΡΠ²ΠΎΠ΄ΠΈΠΌ ΡΠΎΠ»ΡΠΊΠΎ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΠΊΠ»ΡΡΠ° 'encoding'.
ΠΠ΅ΡΠ°Π»ΡΠ½ΡΠΉ ΠΎΡΠ²Π΅Ρ
ΠΠ°ΠΊ ΠΏΡΠΎΠ²Π΅ΡΠΈΡΡ ΠΊΠΎΠ΄ΠΈΡΠΎΠ²ΠΊΡ ΡΠ°ΠΉΠ»Π° Python?
Π ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΠΈ ΡΠ°ΡΡΠΎ Π²ΠΎΠ·Π½ΠΈΠΊΠ°Π΅Ρ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎΡΡΡ ΡΠ°Π±ΠΎΡΠ°ΡΡ Ρ ΡΠ΅ΠΊΡΡΠΎΠ²ΡΠΌΠΈ ΡΠ°ΠΉΠ»Π°ΠΌΠΈ ΡΠ°Π·Π½ΡΡ ΠΊΠΎΠ΄ΠΈΡΠΎΠ²ΠΎΠΊ. ΠΡΠ°Π²ΠΈΠ»ΡΠ½ΠΎΠ΅ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ ΠΊΠΎΠ΄ΠΈΡΠΎΠ²ΠΊΠΈ ΡΠ°ΠΉΠ»Π° ΡΠ²Π»ΡΠ΅ΡΡΡ Π²Π°ΠΆΠ½ΡΠΌ ΡΠ°Π³ΠΎΠΌ ΠΏΡΠΈ ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠ΅ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΠΈ ΠΈΠ· ΡΠ°ΠΉΠ»Π°. Π Π΄Π°Π½Π½ΠΎΠΉ ΡΡΠ°ΡΡΠ΅ ΠΌΡ ΡΠ°ΡΡΠΌΠΎΡΡΠΈΠΌ, ΠΊΠ°ΠΊ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡΠΎΠ²Π΅ΡΠΈΡΡ ΠΊΠΎΠ΄ΠΈΡΠΎΠ²ΠΊΡ ΡΠ°ΠΉΠ»Π° Python.
1. ΠΠΎΠ΄ΡΠ»Ρ chardet
ΠΠΎΠ΄ΡΠ»Ρ chardet ΡΠ²Π»ΡΠ΅ΡΡΡ ΠΎΡΠ»ΠΈΡΠ½ΡΠΌ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½ΡΠΎΠΌ Π΄Π»Ρ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΡ ΠΊΠΎΠ΄ΠΈΡΠΎΠ²ΠΊΠΈ ΡΠ΅ΠΊΡΡΠΎΠ²ΠΎΠ³ΠΎ ΡΠ°ΠΉΠ»Π°. ΠΠ»Ρ Π½Π°ΡΠ°Π»Π° ΡΡΡΠ°Π½ΠΎΠ²ΠΈΠΌ ΡΡΠΎΡ ΠΌΠΎΠ΄ΡΠ»Ρ Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΠΊΠΎΠΌΠ°Π½Π΄Ρ:
pip install chardet
ΠΠΎΡΠ»Π΅ ΡΡΡΠ°Π½ΠΎΠ²ΠΊΠΈ ΠΌΡ ΠΌΠΎΠΆΠ΅ΠΌ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΠΌΠΎΠ΄ΡΠ»Ρ chardet Π΄Π»Ρ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΡ ΠΊΠΎΠ΄ΠΈΡΠΎΠ²ΠΊΠΈ ΡΠ°ΠΉΠ»Π°. ΠΠ»Ρ ΡΡΠΎΠ³ΠΎ Π²ΠΎΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌΡΡ ΡΠ»Π΅Π΄ΡΡΡΠΈΠΌ ΠΊΠΎΠ΄ΠΎΠΌ:
import chardet
def detect_encoding(file_path):
with open(file_path, 'rb') as file:
raw_data = file.read()
result = chardet.detect(raw_data)
return result['encoding']
file_path = 'ΠΏΡΡΡ_ΠΊ_ΡΠ°ΠΉΠ»Ρ'
encoding = detect_encoding(file_path)
print(f'ΠΠΎΠ΄ΠΈΡΠΎΠ²ΠΊΠ° ΡΠ°ΠΉΠ»Π°: {encoding}')
Π ΡΡΠΎΠΌ ΠΏΡΠΈΠΌΠ΅ΡΠ΅ ΠΌΡ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ΅ΠΌ ΠΊΠΎΠ΄ΠΈΡΠΎΠ²ΠΊΡ ΡΠ°ΠΉΠ»Π° Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΡΡΠ½ΠΊΡΠΈΠΈ detect_encoding, ΠΊΠΎΡΠΎΡΠ°Ρ ΠΏΡΠΈΠ½ΠΈΠΌΠ°Π΅Ρ ΠΏΡΡΡ ΠΊ ΡΠ°ΠΉΠ»Ρ Π² ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠ°. Π€ΡΠ½ΠΊΡΠΈΡ ΠΎΡΠΊΡΡΠ²Π°Π΅Ρ ΡΠ°ΠΉΠ» Π² Π΄Π²ΠΎΠΈΡΠ½ΠΎΠΌ ΡΠ΅ΠΆΠΈΠΌΠ΅, ΡΡΠΈΡΡΠ²Π°Π΅Ρ Π΅Π³ΠΎ ΡΠΎΠ΄Π΅ΡΠΆΠΈΠΌΠΎΠ΅ ΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅Ρ ΠΌΠΎΠ΄ΡΠ»Ρ chardet Π΄Π»Ρ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΡ ΠΊΠΎΠ΄ΠΈΡΠΎΠ²ΠΊΠΈ. Π Π΅Π·ΡΠ»ΡΡΠ°ΡΠΎΠΌ ΡΠ²Π»ΡΠ΅ΡΡΡ ΡΡΡΠΎΠΊΠ°, ΡΠΎΠ΄Π΅ΡΠΆΠ°ΡΠ°Ρ ΠΊΠΎΠ΄ΠΈΡΠΎΠ²ΠΊΡ ΡΠ°ΠΉΠ»Π°, ΠΊΠΎΡΠΎΡΡΡ ΠΌΡ Π²ΡΠ²ΠΎΠ΄ΠΈΠΌ Π½Π° ΡΠΊΡΠ°Π½.
Π‘ ΠΏΠΎΠΌΠΎΡΡΡ ΠΌΠΎΠ΄ΡΠ»Ρ chardet ΠΌΡ ΠΌΠΎΠΆΠ΅ΠΌ ΠΏΡΠΎΠ²Π΅ΡΠΈΡΡ ΠΈ Π΄ΡΡΠ³ΠΈΠ΅ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΡ ΡΠ°ΠΉΠ»Π°, ΡΠ°ΠΊΠΈΠ΅ ΠΊΠ°ΠΊ ΡΠ²Π΅ΡΠ΅Π½Π½ΠΎΡΡΡ Π² ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΠΈ ΠΊΠΎΠ΄ΠΈΡΠΎΠ²ΠΊΠΈ ΠΈ ΡΡΠ΅ΡΡΠΈΠΊ Π±Π°ΠΉΡ. ΠΠ»Ρ ΡΡΠΎΠ³ΠΎ ΠΌΠΎΠΆΠ½ΠΎ Π²ΠΎΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡΡΡ ΡΠ²ΠΎΠΉΡΡΠ²Π°ΠΌΠΈ 'confidence' ΠΈ 'byteordermark':
import chardet
def detect_encoding(file_path):
with open(file_path, 'rb') as file:
raw_data = file.read()
result = chardet.detect(raw_data)
encoding = result['encoding']
confidence = result['confidence']
byte_order_mark = result['byteordermark']
return encoding, confidence, byte_order_mark
file_path = 'ΠΏΡΡΡ_ΠΊ_ΡΠ°ΠΉΠ»Ρ'
encoding, confidence, byte_order_mark = detect_encoding(file_path)
print(f'ΠΠΎΠ΄ΠΈΡΠΎΠ²ΠΊΠ° ΡΠ°ΠΉΠ»Π°: {encoding}')
print(f'Π£Π²Π΅ΡΠ΅Π½Π½ΠΎΡΡΡ: {confidence}')
print(f'Byte Order Mark: {byte_order_mark}')
2. ΠΠΎΠ΄ΡΠ»Ρ fileinput
ΠΡΡΠ³ΠΎΠΉ ΡΠΏΠΎΡΠΎΠ± ΠΏΡΠΎΠ²Π΅ΡΠΈΡΡ ΠΊΠΎΠ΄ΠΈΡΠΎΠ²ΠΊΡ ΡΠ°ΠΉΠ»Π° - ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΠΌΠΎΠ΄ΡΠ»Ρ fileinput. ΠΡΠΎΡ ΠΌΠΎΠ΄ΡΠ»Ρ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ Π½Π°ΠΌ ΠΎΠ±ΡΠ°Π±Π°ΡΡΠ²Π°ΡΡ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΡΠ°ΠΉΠ»ΠΎΠ² ΡΡΠ°Π·Ρ ΠΈ ΠΏΠΎΠ»ΡΡΠΈΡΡ Π΄ΠΎΡΡΡΠΏ ΠΊ ΠΈΡ ΡΠΎΠ΄Π΅ΡΠΆΠΈΠΌΠΎΠΌΡ. ΠΠ»Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ ΠΌΠΎΠ΄ΡΠ»Ρ fileinput Π½Π°ΠΌ ΠΏΠΎΡΡΠ΅Π±ΡΠ΅ΡΡΡ ΡΠ»Π΅Π΄ΡΡΡΠΈΠΉ ΠΊΠΎΠ΄:
import fileinput
def detect_encoding(file_path):
with fileinput.FileInput(file_path, openhook=fileinput.hook_encoded("utf-8")) as file:
for line in file:
pass
return file.encoding
file_path = 'ΠΏΡΡΡ_ΠΊ_ΡΠ°ΠΉΠ»Ρ'
encoding = detect_encoding(file_path)
print(f'ΠΠΎΠ΄ΠΈΡΠΎΠ²ΠΊΠ° ΡΠ°ΠΉΠ»Π°: {encoding}')
Π ΡΡΠΎΠΌ ΠΏΡΠΈΠΌΠ΅ΡΠ΅ ΠΌΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π»ΠΈ ΡΡΠ½ΠΊΡΠΈΡ detect_encoding, ΠΊΠΎΡΠΎΡΠ°Ρ ΠΏΡΠΈΠ½ΠΈΠΌΠ°Π΅Ρ ΠΏΡΡΡ ΠΊ ΡΠ°ΠΉΠ»Ρ Π² ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠ°. Π€ΡΠ½ΠΊΡΠΈΡ ΠΎΡΠΊΡΡΠ²Π°Π΅Ρ ΡΠ°ΠΉΠ» Ρ ΠΏΠΎΠΌΠΎΡΡΡ fileinput.FileInput ΠΈ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠ° openhook, ΠΊΠΎΡΠΎΡΡΠΉ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ ΡΠΊΠ°Π·Π°ΡΡ ΠΊΠΎΠ΄ΠΈΡΠΎΠ²ΠΊΡ ΡΠ°ΠΉΠ»Π°. ΠΠ°ΡΠ΅ΠΌ ΠΌΡ ΠΏΡΠΎΡ ΠΎΠ΄ΠΈΠΌ ΠΏΠΎ ΡΡΡΠΎΠΊΠ°ΠΌ ΡΠ°ΠΉΠ»Π° Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΡΠΈΠΊΠ»Π° for, ΡΡΠΎΠ±Ρ Π΄Π΅ΠΉΡΡΠ²ΠΈΡΠ΅Π»ΡΠ½ΠΎ ΠΏΡΠΎΡΠΈΡΠ°ΡΡ Π²ΡΠ΅ ΡΡΡΠΎΠΊΠΈ ΡΠ°ΠΉΠ»Π°. ΠΠΎ Π·Π°Π²Π΅ΡΡΠ΅Π½ΠΈΠΈ ΡΠΈΠΊΠ»Π° ΠΌΡ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅ΠΌ ΠΊΠΎΠ΄ΠΈΡΠΎΠ²ΠΊΡ ΡΠ°ΠΉΠ»Π°, ΠΏΠΎΠ»ΡΡΠ΅Π½Π½ΡΡ ΠΈΠ· file.encoding.
ΠΠ±ΡΠ°ΡΠΈΡΠ΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, ΡΡΠΎ Π² ΠΏΡΠΈΠΌΠ΅ΡΠ΅ ΠΌΡ ΡΠΊΠ°Π·Π°Π»ΠΈ ΠΊΠΎΠ΄ΠΈΡΠΎΠ²ΠΊΡ "utf-8" Π² ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠ΅ openhook. ΠΡ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡΡ ΡΡΠΎΡ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡ, ΡΡΠΎΠ±Ρ ΠΏΡΠΎΠ²Π΅ΡΠΈΡΡ ΡΠ°ΠΉΠ»Ρ Ρ ΡΠ°Π·Π½ΡΠΌΠΈ ΠΊΠΎΠ΄ΠΈΡΠΎΠ²ΠΊΠ°ΠΌΠΈ.
ΠΡΠ²ΠΎΠ΄
Π ΡΡΠΎΠΉ ΡΡΠ°ΡΡΠ΅ ΠΌΡ ΡΠ°ΡΡΠΌΠΎΡΡΠ΅Π»ΠΈ Π΄Π²Π° ΡΠΏΠΎΡΠΎΠ±Π° ΠΏΡΠΎΠ²Π΅ΡΠΊΠΈ ΠΊΠΎΠ΄ΠΈΡΠΎΠ²ΠΊΠΈ ΡΠ°ΠΉΠ»Π° Π² Python. ΠΠΎΠ΄ΡΠ»Ρ chardet ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²Π»ΡΠ΅Ρ ΠΏΠΎΠ΄ΡΠΎΠ±Π½ΡΡ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ ΠΎ ΠΊΠΎΠ΄ΠΈΡΠΎΠ²ΠΊΠ΅ ΡΠ°ΠΉΠ»Π°, Π²ΠΊΠ»ΡΡΠ°Ρ ΡΠ²Π΅ΡΠ΅Π½Π½ΠΎΡΡΡ ΠΈ ΡΡΠ΅ΡΡΠΈΠΊ Π±Π°ΠΉΡ. ΠΠΎΠ΄ΡΠ»Ρ fileinput ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ ΠΎΠ±ΡΠ°Π±Π°ΡΡΠ²Π°ΡΡ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΡΠ°ΠΉΠ»ΠΎΠ² ΠΎΠ΄Π½ΠΎΠ²ΡΠ΅ΠΌΠ΅Π½Π½ΠΎ ΠΈ ΠΏΠΎΠ»ΡΡΠ°ΡΡ Π΄ΠΎΡΡΡΠΏ ΠΊ ΠΈΡ ΡΠΎΠ΄Π΅ΡΠΆΠΈΠΌΠΎΠΌΡ.
ΠΠ΅Π·Π°Π²ΠΈΡΠΈΠΌΠΎ ΠΎΡ Π²ΡΠ±ΡΠ°Π½Π½ΠΎΠ³ΠΎ ΡΠΏΠΎΡΠΎΠ±Π°, ΡΠ±Π΅Π΄ΠΈΡΠ΅ΡΡ, ΡΡΠΎ ΠΏΠ΅ΡΠ΅Π΄ ΠΏΡΠΎΠ²Π΅ΡΠΊΠΎΠΉ ΠΊΠΎΠ΄ΠΈΡΠΎΠ²ΠΊΠΈ ΡΠ°ΠΉΠ» ΠΎΡΠΊΡΡΡ Π² Π΄Π²ΠΎΠΈΡΠ½ΠΎΠΌ ΡΠ΅ΠΆΠΈΠΌΠ΅, ΡΡΠΎΠ±Ρ ΠΈΠ·Π±Π΅ΠΆΠ°ΡΡ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΡΡ ΠΏΡΠΎΠ±Π»Π΅ΠΌ Ρ ΠΏΠ΅ΡΠ΅ΠΊΠΎΠ΄ΠΈΡΠΎΠ²ΠΊΠΎΠΉ ΡΠΈΠΌΠ²ΠΎΠ»ΠΎΠ².
Π’Π΅ΠΏΠ΅ΡΡ Ρ Π²Π°Ρ Π΅ΡΡΡ Π²ΡΠ΅ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΡΠ΅ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½ΡΡ Π΄Π»Ρ ΠΏΡΠΎΠ²Π΅ΡΠΊΠΈ ΠΊΠΎΠ΄ΠΈΡΠΎΠ²ΠΊΠΈ ΡΠ°ΠΉΠ»ΠΎΠ² Π² Python. Π£ΡΠΏΠ΅ΡΠ½ΠΎΠΉ ΡΠ°Π±ΠΎΡΡ!