- 01
- 02
- 03
- 04
- 05
- 06
- 07
- 08
- 09
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
class TestCase(unittest2.TestCase):
def md5Checksum(self,filePath):
"""
Calculates MD5sum hash of a file.
It does this as a stream 1k blocks, for large files.
We checksum the sample LFD we download as a test, in order to check it gave us the right one back, no corruption.
Returns MD5sum as string.
"""
try:
with open(filePath, 'rb') as fh:
m = hashlib.md5()
while True:
data = fh.read(1024) #: Read 1kb chunks, for large files.
if not data:
break
else:
m.update(data)
return str(m.hexdigest())
except Exception as e:
self.fail(str( e ))
return ""
- это код из тест класса
- try/except который с ретурн после фейла
- рид по 1к вместо "for line in file"
- комент гавенный
- нейминг
да тут все говно в этом куске
for line in file - говно. read норм, надо только поднять константу до 4096 - типичный размер блока.
> for line in file
Упрлс?
Кэп на связи.
Борманд намекнул, что двоичный режим и чтение по строкам — нонсенс. Тут нужно либо 'b' убрать (потому что всё равно файл порежется на строки), либо read вернуть.
Поскольку нужно считать контрольную сумму, то файл нельзя калечить. Следовательно, оставляем и 'b', и read.
Read one entire line from the file. A trailing newline character is kept in the string (but may be absent when a file ends with an incomplete line).
open(name[, mode[, buffering]])
The default is to use text mode, which may convert '\n' characters to a platform-specific representation on writing and back on reading.
Похоже, что позволит. Но это имеет смысл, поскольку стандартная библиотека Питона, в отличие от библиотек других языков, сохраняет символ перевода строки в строке. Т. е. в обычных задачах нам ещё придётся отрезать от строки последний символ, означающий её окончание.
Но если мы не укажем 'b', то он при чтении может заменить \r\n на \n, т. е. потерять \r.
Вот он, эталон. Я хотел просто прочитать стандартным методом из стандартной либой, а он взял и поменял символы в файле при чтении. Питон вэй, ау!
Удачной обработки, если в терабайтном архиве байт "\n" вообще не встретится или наоборот будет встречаться через каждые десять байтов.