user5095342
user5095342

Reputation:

Python copy files to folder

I'm currently trying to copy files from one folder to another (without knowing the names of the files)

However, it's not working and I can't seem to understand why. Below is the code and the error code:

#!/usr/bin/python
import sys, os, time, shutil

path = '/home/images/'
files = os.listdir(path)
files.sort()
for f in files:
        src = path+f
        dst = '/USB/images/' +f
        shutil.move(src, dst)

And the error:

Traceback (most recent call last):
  File "copy.py", line 10, in <module>
    shutil.move(dst, src)
  File "/usr/lib/python2.7/shutil.py", line 301, in move
    copy2(src, real_dst)
  File "/usr/lib/python2.7/shutil.py", line 130, in copy2
    copyfile(src, dst)
  File "/usr/lib/python2.7/shutil.py", line 82, in copyfile
    with open(src, 'rb') as fsrc:
IOError: [Errno 2] No such file or directory: '/USB/images/26-07-2015-18:06:22-01.jpg'

Can anybody help me in the right direction? Thanks!

Upvotes: 3

Views: 1636

Answers (4)

Maelstrom
Maelstrom

Reputation: 453

Looks like your destination dir is not writable, or non-existent? What do you see when you do ls -l /USB/images?

BTW, I thought you wanted to copy? shutil.move will move the file, not copy.

EDIT: destination VFAT requires special file conversion

How about this:

#!/usr/bin/python
import sys, os, time, shutil

path = '/home/images/'
files = os.listdir(path)
files.sort()
for f in files:
    f_dst = f.replace(':','_')
    src os.path.join(path, f)
    dst = os.path.join('/USB/images/', f_dst)
    shutil.move(src, dst)

Upvotes: 0

Open AI - Opting Out
Open AI - Opting Out

Reputation: 24164

It should be:

shutil.move(dst, src)

Upvotes: 1

Daniel Renshaw
Daniel Renshaw

Reputation: 34197

The code and error message don't appear to tally up to one another.

The code suggests you're calling

shutil.move(src, dst)

but the error suggests you're calling

shutil.move(dst, src)

If you're doing the latter then clearly the error message makes sense if the /USB/images/26-07-2015-18:06:22-01.jpg does not already exist.

You may also have trouble using : characters in the filenames. The FAT (or derivative) filesystem is common on (typically smaller) USB devices. That filesystem type does not permit any of the following characters in filenames: "/\*?<>|:.

Upvotes: 2

Parfait
Parfait

Reputation: 107777

Use the OS-agnostic function os.path.join() to effectively concatenate file names to folder paths.

#!/usr/bin/python
import sys, os, time, shutil

path = '/home/images/'

files = os.listdir(path)
files.sort()
for f in files:
  src = os.path.join(path, f)
  dst = os.path.join('/USB/images/', f)
  shutil.move(src, dst)

Upvotes: -1

Related Questions