Reputation: 924
I'm trying to create a file with a unique file name for every time my script runs. I am only intending to do this to every week or month. so I chose to use the date for the file name.
f = open('%s.csv', 'wb') %name
is where I'm getting this error.
Traceback (most recent call last):
File "C:\Users\User\workspace\new3\stjohnsinvoices\BabblevoiceInvoiceswpath.py", line 143, in <module>
f = open('%s.csv', 'ab') %name
TypeError: unsupported operand type(s) for %: 'file' and 'str'
it works if I use a static filename, is there an issue with the open function, that means you can't pass a string like this?
name is a string and has values such as :
31/1/2013BVI
Many thanks for any help.
Upvotes: 27
Views: 202891
Reputation: 1
import hashlib
filename = file_for_download
with open(filename, "rb") as f:
bytes = f.read() # read entire file as bytes
msg_hash = hashlib.sha256(bytes).hexdigest();
print(f"MSG_HASH = {msg_hash}")
Upvotes: -1
Reputation: 1199
Very similar to peixe.
You don't have to mention the number if the variables you add as parameters are in order of appearance
f = open('{}.csv'.format(name), 'wb')
Another option - the f-string formatting (ref):
f = open(f"{name}.csv", 'wb')
Upvotes: 7
Reputation: 1161
Even better are f-strings in python 3!
f = open(f'{name}.csv', 'wb')
Upvotes: 5
Reputation: 1292
And with the new string formatting method...
f = open('{0}.csv'.format(name), 'wb')
Upvotes: 5
Reputation: 32300
You need to put % name
straight after the string:
f = open('%s.csv' % name, 'wb')
The reason your code doesn't work is because you are trying to %
a file, which isn't string formatting, and is also invalid.
Upvotes: 50
Reputation: 14854
you can do something like
filename = "%s.csv" % name
f = open(filename , 'wb')
or f = open('%s.csv' % name, 'wb')
Upvotes: 7