", line 31, i" /> ", line 31, i" /> ", line 31, i"/>

Issue with moving a file using shutil.move()

2.4k Views Asked by At

I am trying to move a file using the shutil module in Python. I keep getting this error:

Traceback (most recent call last):
  File "<input>", line 31, in <module>
  File "C:\Python27\lib\shutil.py", line 302, in move
    copy2(src, real_dst)
  File "C:\Python27\lib\shutil.py", line 130, in copy2
    copyfile(src, dst)
  File "C:\Python27\lib\shutil.py", line 82, in copyfile
    with open(src, 'rb') as fsrc:
 IOError: [Errno 2] No such file or directory: 'MLR_Resi_Customer.txt'

I do not understand why I am getting no such file or directory. If instead of using a shutil.move(filename, new_dest) it will print the file name I am looking for.

import shutil
import os
import datetime

# set location of folders and files needed
source = '//nspinfwcipp01/BSA/marketing'
dest_cust = '//nspinfwcipp01/BSA/marketing/res_cust'
dest_pros = '//nspinfwcipp01/BSA/marketing/res_pros'
dest_win = '//nspinfwcipp01/BSA/marketing/res_win'

# create date time stamp of now
dt = str(datetime.datetime.now())

files = os.listdir(source)
print files

# create new path to storage files for old data
cust_files = os.listdir(dest_cust)
pros_files = os.listdir(dest_pros)
win_files = os.listdir(dest_win)

# new file names
new_cust = 'MLR_Resi_Customers'+dt+'.txt'
new_pros = 'MLR_Resi_Prospects'+dt+'.txt'
new_win = 'MLR_Resi_Winbacks'+dt+'.txt'

   #move files from marketing folder into their own folder when after done     processing

for f in files:
    if (f.endswith("Customer.txt")):
        print f
        shutil.move(f,dest_cust)
    elif (f.endswith("Prospects")):
        #print f
         shutil.move(f,dest_pros)
    elif (f.endswith("Winbacks")):
        #print f
        shutil.move(f,dest_win)

##rename files in storage with data for Kalyan and Jake's Project

## rename customer file for storage
for x in cust_files:
    if (x.endswith("Customers")):
        #print x
        new_cust = 'MLR_Resi_Customer'+dt+'.txt'
        os.rename('MLR_Resi_Customers.txt', new_cust)
    else:
        print "no_customer_file"

## rename prospect file for storage
for x in cust_files:
    if (x.endswith("Prospects")):
        #print x
        os.rename('MLR_Resi_Prospects.txt', new_pros)
    else:
        print "no_prospect_file"

## rename winback file for storage
for x in cust_files:
    if (x.endswith("Winbacks")):
        #print x
        os.rename('MLR_Resi_Winbacks.txt', new_win)
    else:
        print "no_winback_file"

So I am not sure what I am doing wrong. The path to the files is correct and It seems to be able to print the file name just fine. Any help with those issues above is greatly appreciated.

1

There are 1 best solutions below

0
Andria On

Use shutil.move(glob.glob(f)[0],dest_whatever) and that should solve your problem by giving it an actual path to the file, although, if the file doesn't exist glob.glob will return an empty array.