Со следующим кодом Python
import csv
log_file = open('190415190514.txt', 'r')
all_data = csv.reader(log_file, delimiter=' ')
data = []
for row in all_data:
data.append(row)
прочитать большой файл, содержащий
2019-04-15 00:00:46 192.168.168.29 GET / - 443 - 192.168.168.80 Mozilla/5.0+(compatible;+PRTG+Network+Monitor+(www.paessler.com);+Windows) - 200 0 0 0
я получаю эту ошибку
File "main.py", line 5, in <module>
for row in datareader:
File "/usr/lib/python3.6/codecs.py", line 321, in decode
(result, consumed) = self._buffer_decode(data, self.errors, final)
UnicodeDecodeError: 'utf-8' codec can't decode byte 0x80 in position 1284: invalid start byte
Я думаю, что нет проблем с файлом данных, так как это файл журнала IIS. Если есть какие-либо проблемы с кодировкой, как я могу найти эту строку? Я также не уверен, что моя проблема та же самая это.
Поскольку вы открыли файл как 'r'
вместо 'rb
', python пытается декодировать его как utf-8. Содержимое файла, по-видимому, недопустимо в формате utf-8, поэтому вы получаете сообщение об ошибке. Вы можете найти номер строки с ошибкой следующим образом:
with open('190415190514.txt', 'rb') as f:
for i, line in enumerate(f):
try:
line.decode('utf-8')
except UnicodeDecodeError as e:
print (f'{e} at line {i+1}')
Вы, вероятно, должны пройти errors
или encoding
, чтобы открыть. см.: https://docs.python.org/3/library/functions.html#open
Если вы просто хотите игнорировать их, вы можете перейти от errors='ignore'
к open
ОК, я вижу некоторые символы
%2f%69%6e%64%
, которые кажутся неанглийскими словами. Как я могу игнорировать эти строки?