Stephen Reese schrieb:
The script below uploads files to a web server. Currently it
overwrites a file if it already exists. I'm instead trying to rename
the old file with an appended date/timestamp before the new file is
uploaded. I *think* I have the idea down but it's not be implemented
in the script correctly. Any hints would be great, thanks.

#!/usr/bin/env python
import cgi, os
import cgitb; cgitb.enable()
#import os.path
import hashlib
import datetime

try: # Windows needs stdio set for binary mode.
    import msvcrt
    msvcrt.setmode (0, os.O_BINARY) # stdin  = 0
    msvcrt.setmode (1, os.O_BINARY) # stdout = 1
except ImportError:
    pass

form = cgi.FieldStorage()

# Generator to buffer file chunks
def fbuffer(f, chunk_size=10000):
   while True:
      chunk = f.read(chunk_size)
      if not chunk: break
      yield chunk

# A nested FieldStorage instance holds the file
fileitem = form['file']

# Test if the file was uploaded
if fileitem.filename:

   # Test to determine if file name already exists in destination and
rename if it does exist to include date.
   if os.path.isfile(file):
      os.rename(file,file + "date")
   else:


This isn't working because the else: is dangling. And I think your logic is flawed (I might be wrong of course) because you rename the *existing* file instead of giving the new one a new data.

Thus e.g. a link to the file (if it's a webserver) will suddenly deliver a different file. I doubt that's what you wanted. And you also can only upload one file per *day*. Which doesn't sound good to me. You should disambiguate further. And if it's ok to append a date, I suggest you do that always.

So instead, the logic should be something like this:

import datetime

basename = ... # however you get to that

basename = basename + "_" + datetime.datetime.now().strftime("%Y-%m-%d")

count = 0
filename = basename
while os.path.isfile(filename):
    filename = basename + "." + count
    count += 1


Diez
--
http://mail.python.org/mailman/listinfo/python-list

Reply via email to