Сравнение файлов: локальный и удаленный (время и размер) - PullRequest
0 голосов
/ 15 октября 2019

Я пытаюсь сравнить удаленные и локальные файлы, основанные на размере и последней измененной временной метке, хранящиеся на удаленном HTTP-сервере, и хранящиеся на локальной машине. Удаленные файлы меняются не так часто, поэтому выполняем быструю проверку вместо простого скачивания. Я знаю, что удаленные файлы не меняются, но когда я записываю их локально, а затем перекомпоновываю, они показывают разный размер файла и временные метки. Как я могу убедиться, что я правильно сравниваю и записываю файлы?

Приведенный ниже код обобщен и показывает только общий процесс проверки.

# Pull metadata on remote files
r = requests.head(url)
remote_file_last_modified = r.headers['last-modified']
remote_file_last_modified = int(time.mktime(datetime.datetime.strptime(remote_file_last_modified[:-4], "%a, %d %b %Y %H:%M:%S").timetuple()))
remote_file_size = int(r.headers['content-length'])
# Get metadata on local files
local_file_last_modified = int(os.path.getmtime(local_file_name))
local_file_size = os.stat(local_file_name).st_size

if remote_file_size != local_file_size or remote_file_last_modified != local_file_last_modified:
    # They are not the same

# Download remote files
r = requests.get(url)
remote_file_last_modified = r.headers['last-modified']
remote_file_last_modified = int(time.mktime(datetime.datetime.strptime(remote_file_last_modified[:-4], "%a, %d %b %Y %H:%M:%S").timetuple()))

# This is how the remote file is written locally
with open(local_file_name, 'wb') as f:
    f.write(r.content)

# Test remote file was written correctly
remote_file_size = int(r.headers['content-length'])
local_file_size = os.stat(local_file_name).st_size

if remote_file_size != local_file_size:
    #  Files did not download correctly
else:
    # Update the local file times to match the remote file
    os.utime(local_file_name,(remote_file_last_modified, remote_file_last_modified))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...