У меня есть код для копирования файлов на сетевой ресурс. Код работает нормально (на ма c) с python 2.7.17, но дает мне поврежденный файл с Python 3.7.6. Я не знаю, является ли это ошибкой или изменением между python2 и python3, о котором я не знаю, но я не знаю, как заставить мой код работать.
Я читаю файл объемом 300 МБ из локальной файловой системы в память, проверяю sha1 содержимого, а затем записываю содержимое в общий сетевой ресурс (mount -t smbfs ...
вызывается из subprocess.check_output
).
def read(path):
with open(path, "rb") as f:
return f.read()
def write(content, smbpath, sha1):
with open(smbpath, "wb") as f:
if (sha1 == hashlib.sha1(content).hexdigest())
f.write(content)
localroot = <local path>
smbroot = <remote path>
file = <some file.7z>
content = read(os.path.join(localroot, file)
write(content, os.path.join(smbroot, file), <sha read from local system>)
Python говорит, что значения файла SHA совпадают, но когда я вычисляю ша вручную (shasum smbroot/<file>
из терминала), он дает другой ша. Если я копирую файл обратно в локальную файловую систему, он отличается от оригинала и выдает тот же (недействительный) SHA, что и shasum
, созданный на общем ресурсе.
Я подозревал, что проблема может быть с сетевым диском, но
- прекрасно работает с python2 и
- , копирование файлов вручную с терминала работает.
Так что это, похоже, определено c до Python3. Известны ли изменения или ошибки?