0

I am trying to get the md5 checksum of some files and write them into a temp file.

import os
import hashlib

PID = str(os.getpid()) 
manifest = open('/temp/tmp/MANIFEST.'+ PID + '.tmp','w') #e.g. MANIFEST.48938.tmp
for elmt in files_input:
    input = open(elmt['file'], "r", 'us-ascii') #'us-ascii' when I ran "file --mime"
    manifest.write(hashlib.md5(input.read()).hexdigest()) 

From this I get a Python error that I haven't able to resolve:

Traceback (most recent call last):
 File "etpatch.py", line 131, in <module>
    input = open(elmt['file'], "r", 'us-ascii')
TypeError: an integer is required

Some people have had this error from doing "from os import *" but I am not doing this nor am I using import * on any other module.

imagineerThat
  • 5,293
  • 7
  • 42
  • 78

1 Answers1

1

The third argument to open() is expected to be an integer:

open(name[, mode[, buffering]])

The optional buffering argument specifies the file’s desired buffer size: 0 means unbuffered, 1 means line buffered, any other positive value means use a buffer of (approximately) that size (in bytes). A negative buffering means to use the system default, which is usually line buffered for tty devices and fully buffered for other files. If omitted, the system default is used. [2]

Community
  • 1
  • 1
NPE
  • 486,780
  • 108
  • 951
  • 1,012
  • Thanks. If I take out the offending argument, I get "TypeError: Unicode-objects must be encoded before hashing" in the next line I use hashlib. I tried doing "open(elmt['file'], "r", encoding='us-ascii')" but I get the same error. – imagineerThat Mar 18 '13 at 22:39