【问题标题】:Python - How to read a video file as binary data?Python - 如何将视频文件读取为二进制数据?
【发布时间】:2013-07-15 05:36:08
【问题描述】:

我的作业要求我计算视频文件的哈希值。所以我猜我需要做的是以某种方式将视频文件读取为二进制数据,然后用它进行散列恶作剧。问题是,我只知道如何读取和写入 .txt 文件——视频文件对我来说是全新的。所以我的问题是:

如何获取文件并将其作为二进制数据读取?

如何处理这些数据?我的意思是,我应该将它粘贴到一个字符串中还是应该使用某种数组?我想数字的数量会很大,我不希望我的电脑崩溃,因为我以一种非常低效的方式处理数据:D。

另外,当我说“二进制数据”时,我并不完全确定我在说什么,因为我对这类东西的经验有限。我的意思是,它不仅仅是一串 1 和 0,对吧?所以我也很欣赏关于“二进制数据”的速成课程:D

【问题讨论】:

  • 二进制数据只是指原始数据...,要读取二进制数据,您需要以二进制模式打开文件open(fname,"rb")
  • 文本数据是二进制数据,但在读取“文本文件”时,阅读器会查找诸如 UTF 编码字节、换行符等内容。通过使用“b”作为打开模式,您可以绕过这并告诉 python 将原始未触及的数据交给你。

标签: python file video binary


【解决方案1】:

文本数据和二进制数据确实没有区别。字符串只是一个字节序列。每个字节或几个字节的值对应于一个文本字符。因此,我们可以像字符串一样读取和存储二进制数据(字节序列)。唯一的区别是我们从二进制中读取的字符序列可能无法被人类阅读。

"rb"(读取二进制)标记文件打开格式以避免文本行结束问题。 要处理大文件,您可以一次读取少量字节并在执行过程中计算字节的哈希值。

started = 0
hash_val = 0

with open("video", "rb") as file:
    byte = file.read(1) # read a byte (a single character in text)
    byte_val = ord(byte) # convert the string character into a number

    if started == 0:
        hash_val = byte_val
        started = 1
    hash_val = (hash_val << 5) - hash_val + byte_val # this is a basic hash

print(hash_val)

【讨论】:

  • 好的,这很好解释!我会看看我现在能做什么。
  • @NorsulRonsul 我不知道特定哈希在 python 中有多可靠,因为您不能依赖包装行为等 - 它应该让您了解这样的哈希是如何工作的。优化可能是一次读取 64 或 128 个字节,而不是一个,并迭代每个字符
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-09-26
  • 1970-01-01
  • 1970-01-01
  • 2010-12-08
  • 2015-03-13
  • 1970-01-01
相关资源
最近更新 更多