Search code examples
pythonmkdir

why in the famous backup python script, it doesn't work when target folder name contains spaces?


hello everyone: this is the famous code for backing up files. It works fine giving me the message ( successful back up ). the target directory is created, but it is empty. But when I remove spaces from the target folder name it worked very fine. so, what is the problem and how to use target folders with spaces ?

enter code here

import os
import time

source = [r'D:\python35']

target_dir = r"D:\Backup to harddisk 2016"

target = target_dir + os.sep + time.strftime('%Y%m%d%H%M%S') + '.zip'

if not os.path.exists(target_dir):
    os.mkdir(target_dir)

zip_command = "zip -r {0} {1}".format(target, ' '.join(source))
print('zip command is:')
print(zip_command)
print('Running:')
if os.system(zip_command) == 0:
    print('Successful backup to', target)
else:
    print('Backup FAILED')

Solution

  • The problem is that Windows doesn't know that those spaces are part of the file name. Use subprocess.call, which takes a list of parameters instead. On Windows, it escapes the spaces for you before calling CreateProcess.

    import subprocess as subp
    zip_command = ["zip", "-r", target] + source
    if subp.call(zip_command) == 0:
        print('Successful backup to', target)