MD5检查器错误:变量太多(应为4个),可能存在其他问题

2024-05-19 10:28:40 发布

您现在位置:Python中文网/ 问答频道 /正文

我对编程还比较陌生,刚开始工作。我被要求提出两份申请。一种获取和存储文件信息的方法,如文件名、大小、上次修改时间和MD5校验和,然后为多个文件编写一个包含该数据的文件;这个程序运行得很好

我的第二个程序(我将在下面为其发布代码)应该检查创建的文件,并将其与文件的当前条件进行比较。如果MD5 sum随其他属性一起更改,那么程序不会给出警告。但是,如果所有属性都保持不变,但是MD5发生了更改,那么程序会发出警告,因为出现了问题

我遇到的问题是如何让checker程序工作。我是一个初学者,所以如果有人能看看我的代码,看看我哪里出了差错,我会很感激的

这是我产生的代码

 files = glob('C:\pytesty\*\*')


filecheck = open('MD5report.dat', 'r')
for fil3 in files:
          fil3md5 = open(fil3, 'rb')
          md5read = fil3md5.read()
          hashy = hashlib.md5(md5read).hexdigest()
          filsize = os.path.getsize(fil3)
          filtime = time.ctime(os.path.getmtime(fil3))
          fline = filecheck.readline()
          [finame, fiMD5, fiSize, fidate] = fline.split('|')

          if (finame == fil3 and fiSize == filsize and fidate == filtime and fiMD5 != hashy):
                    print(finame + ': match')
          else:
                    print(finame + ': is OK')

下面是我尝试运行程序时收到的错误消息:

    Traceback (most recent call last):
  File "C:\a\b\c\checkfile.py", line 21, in <module>
    [finame, fiMD5, fiSize, fidate] = fline.split('|')
ValueError: too many values to unpack (expected 4)

以下是MD5检查器读取并引用的其他程序输出的示例:

C:\pytesty\pyt01\ex2.txt | 7a9d20dd22c96bea3ea1fa0d01085755 | 69 | 2017年5月8日星期一19:01:00 |


Tags: and文件代码程序警告属性filesmd5
3条回答

您正在将字符串拆分为5个部分,如您在原始帖子上的评论所述。但是,您只提供了四个变量来存储这五个字符串。您需要添加一个额外的变量来从中捕获fifth字符串 fline.split('|')

示例:

[finame, fiMD5, fiSize, fidate, value] = fline.split('|')

fline(从文件MD5report.dat读取)中有3个以上的|分隔符,即。e。4个以上的部分,以分裂他们与你的命令

 [finame, fiMD5, fiSize, fidate] = fline.split('|')

如果这不是一个错误,并且您有超过4个部分(在文件MD5report.dat的行中),请将下划线(_)作为跳过部分的占位符,例如。g

[finame, fiMD5, fiSize, fidate, _, _] = fline.split('|')

你可以做一个简单的测试:

>>> 'C:\pytesty\pyt01\ex2.txt|7a9d20dd22c96bea3ea1fa0d01085755|69|Mon May  8 19:01:00 2017|'.split('|')
['C:\\pytesty\\pyt01\\ex2.txt', '7a9d20dd22c96bea3ea1fa0d01085755', '69', 'Mon May  8 19:01:00 2017', '']
>>> len(_)
5 # you actually get more values

但是[a, b, c, d] = "string".split("|")意味着“将split返回的值填充到一个变量中”。因此,在split返回的列表中,必须有四个值,但实际上有五个,因此出现了错误

相关问题 更多 >

    热门问题