- 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 ""
guest 08.08.2014 14:40 # 0
guest 08.08.2014 14:40 # 0
guest 08.08.2014 14:42 # 0
ykhrustalev 08.08.2014 14:43 # 0
guest 15.08.2014 15:15 # 0
ykhrustalev 08.08.2014 14:42 # 0
- это код из тест класса
- try/except который с ретурн после фейла
- рид по 1к вместо "for line in file"
- комент гавенный
- нейминг
да тут все говно в этом куске
roman-kashitsyn 08.08.2014 14:56 # +1
for line in file - говно. read норм, надо только поднять константу до 4096 - типичный размер блока.
bormand 08.08.2014 15:25 # +1
> for line in file
Упрлс?
anonimb84a2f6fd141 23.08.2014 12:51 # 0
inkanus-gray 24.08.2014 00:49 # 0
Кэп на связи.
Борманд намекнул, что двоичный режим и чтение по строкам — нонсенс. Тут нужно либо 'b' убрать (потому что всё равно файл порежется на строки), либо read вернуть.
Поскольку нужно считать контрольную сумму, то файл нельзя калечить. Следовательно, оставляем и 'b', и read.
kegdan 24.08.2014 01:02 # 0
inkanus-gray 24.08.2014 02:28 # 0
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.
kegdan 24.08.2014 07:22 # 0
Вот он, эталон. Я хотел просто прочитать стандартным методом из стандартной либой, а он взял и поменял символы в файле при чтении. Питон вэй, ау!
bormand 24.08.2014 07:50 # 0
kegdan 24.08.2014 07:57 # 0
inkanus-gray 24.08.2014 02:36 # 0
inkanus-gray 24.08.2014 02:34 # 0
Удачной обработки, если в терабайтном архиве байт "\n" вообще не встретится или наоборот будет встречаться через каждые десять байтов.