# Script using shutil Issue

**URL:** <https://forum.inductiveautomation.com/t/script-using-shutil-issue/53403>\
**Category:** Ignition\
**Created:** [November 23, 2021, 7:47pm UTC](https://forum.inductiveautomation.com/t/script-using-shutil-issue/53403 "2021-11-23T19:47:23Z")\
**Posts on this page:** 15\
**Page:** 1

<div class="post-metadata">

**Author:** ![vasilevdim](https://avatars.discourse-cdn.com/v4/letter/v/7ba0ec/32.png) [@vasilevdim](https://forum.inductiveautomation.com/u/vasilevdim)\
**Post date:** [November 23, 2021, 7:47pm UTC](https://forum.inductiveautomation.com/t/script-using-shutil-issue/53403/1 "2021-11-23T19:47:23Z")

</div>

Hi, guys,

I want to check if in a directory there is file named “TEST” and if yes, to copy it in the same directory under “TST2” name.

````auto
import os
import shutil

dstfile = 'C:\\Applications\\TST2'
path='C:\\Applications\\'
files = os.listdir(path)
for file in files:
    if "TEST" in file:
       
        srcfile = path + file
        shutil.copy(srcfile, dstfile)```

But I get this error:"AttributeError: 'str' object has no attribute 'isdir''

Any hints? Thank you!
````

---

<div class="post-metadata">

**Author:** ![bkarabinchak.psi](https://sea1.discourse-cdn.com/inductiveautomation/user_avatar/forum.inductiveautomation.com/bkarabinchak.psi/32/83567_2.png) [@bkarabinchak.psi](https://forum.inductiveautomation.com/u/bkarabinchak.psi)\
**Post date:** [November 23, 2021, 7:48pm UTC](https://forum.inductiveautomation.com/t/script-using-shutil-issue/53403/2 "2021-11-23T19:48:58Z")

</div>

You’re not showing us your full code, as I don’t see an `isdir` anywhere in what you’ve provided, but that is what is causing you the issue. Somewhere, you have some string, or more likely a variable with a string value, that you are calling `.isdir` on.

---

<div class="post-metadata">

**Author:** ![vasilevdim](https://avatars.discourse-cdn.com/v4/letter/v/7ba0ec/32.png) [@vasilevdim](https://forum.inductiveautomation.com/u/vasilevdim)\
**Post date:** [November 23, 2021, 7:54pm UTC](https://forum.inductiveautomation.com/t/script-using-shutil-issue/53403/3 "2021-11-23T19:54:23Z")

</div>

No, this is the full test code. What I did not show, is the full error text:

```auto
  File "<input>", line 13, in <module>
  File "C:\Users\DimitarV\.ignition\cache\gw192.168. ***.*** _8088\C0\pylib\shutil.py", line 117, in copy
    if os.path.isdir(dst):
AttributeError: 'str' object has no attribute 'isdir'
```

---

<div class="post-metadata">

**Author:** ![bkarabinchak.psi](https://sea1.discourse-cdn.com/inductiveautomation/user_avatar/forum.inductiveautomation.com/bkarabinchak.psi/32/83567_2.png) [@bkarabinchak.psi](https://forum.inductiveautomation.com/u/bkarabinchak.psi)\
**Post date:** [November 23, 2021, 8:00pm UTC](https://forum.inductiveautomation.com/t/script-using-shutil-issue/53403/4 "2021-11-23T20:00:33Z")

</div>

Ah I see, you are actually causing the error inside of `shutil.py` with the arguments you are passing. Do you have any package names or either `os` or `path`? Looks like shutil.py is trying to call `os.path.isdir` from `import os`, but seems like something overwrote it so that `os.path` is somehow just a string object instead of what it normally is.

What do you see if you `print srcfile, dstfile` right before you call `shutil.copy`

Better yet, in script console, if you can do

```auto
import os
print str(type(os.path))

```

do you see `<type 'str'>` or do you see `<type 'module'>`?

---

<div class="post-metadata">

**Author:** ![vasilevdim](https://avatars.discourse-cdn.com/v4/letter/v/7ba0ec/32.png) [@vasilevdim](https://forum.inductiveautomation.com/u/vasilevdim)\
**Post date:** [November 23, 2021, 8:07pm UTC](https://forum.inductiveautomation.com/t/script-using-shutil-issue/53403/5 "2021-11-23T20:07:36Z")

</div>

> [@bkarabinchak.psi](#):
>
> ```python
> import os
> print str(type(os.path))
> 
> ```

I see "\<type 'str'\>  
"

---

<div class="post-metadata">

**Author:** ![bkarabinchak.psi](https://sea1.discourse-cdn.com/inductiveautomation/user_avatar/forum.inductiveautomation.com/bkarabinchak.psi/32/83567_2.png) [@bkarabinchak.psi](https://forum.inductiveautomation.com/u/bkarabinchak.psi)\
**Post date:** [November 23, 2021, 8:11pm UTC](https://forum.inductiveautomation.com/t/script-using-shutil-issue/53403/6 "2021-11-23T20:11:45Z")

</div>

Yea that’s not good, when I do mine I get module which is wht you should expect since it is one.

The string itself is just an empty string? Or is there something in it? I only say that because if there’s some value in it, you can probably Control+F to find that string and the offending package that you have. Whta do you see from `print str(os.path)`?

Do you have a library script you called `os` by chance?

---

<div class="post-metadata">

**Author:** ![vasilevdim](https://avatars.discourse-cdn.com/v4/letter/v/7ba0ec/32.png) [@vasilevdim](https://forum.inductiveautomation.com/u/vasilevdim)\
**Post date:** [November 23, 2021, 8:18pm UTC](https://forum.inductiveautomation.com/t/script-using-shutil-issue/53403/7 "2021-11-23T20:18:25Z")

</div>

This is what I see only:

![image](https://us1.discourse-cdn.com/inductiveautomation/original/3X/3/1/31d1135864da3b1929844150c49f674ad68bc184.png)

I do not have library script or any script calling os modue.

---

<div class="post-metadata">

**Author:** ![bkarabinchak.psi](https://sea1.discourse-cdn.com/inductiveautomation/user_avatar/forum.inductiveautomation.com/bkarabinchak.psi/32/83567_2.png) [@bkarabinchak.psi](https://forum.inductiveautomation.com/u/bkarabinchak.psi)\
**Post date:** [November 23, 2021, 8:20pm UTC](https://forum.inductiveautomation.com/t/script-using-shutil-issue/53403/8 "2021-11-23T20:20:11Z")

</div>

Thats what you see if you do `print str(type(os.path))`, but what if you do `print str(os.path)`?

Something is wrong with the namespace of the modules that much is for sure, now its about figuring out what is being imported instead of the standard `os` library.

---

<div class="post-metadata">

**Author:** ![JordanCClark](https://sea1.discourse-cdn.com/inductiveautomation/user_avatar/forum.inductiveautomation.com/jordancclark/32/83362_2.png) [@JordanCClark](https://forum.inductiveautomation.com/u/JordanCClark)\
**Post date:** [November 23, 2021, 8:20pm UTC](https://forum.inductiveautomation.com/t/script-using-shutil-issue/53403/9 "2021-11-23T20:20:42Z")

</div>

‘file’ is a keyword. Reset the Script Console, and try using a different object name.

---

<div class="post-metadata">

**Author:** ![bkarabinchak.psi](https://sea1.discourse-cdn.com/inductiveautomation/user_avatar/forum.inductiveautomation.com/bkarabinchak.psi/32/83567_2.png) [@bkarabinchak.psi](https://forum.inductiveautomation.com/u/bkarabinchak.psi)\
**Post date:** [November 23, 2021, 8:22pm UTC](https://forum.inductiveautomation.com/t/script-using-shutil-issue/53403/10 "2021-11-23T20:22:28Z")

</div>

D’oh. That did ring alarm bells in my head but I couldn’t place it. The interactive script module highlights keywords like file, in, not, None, all of which should never be used as variable names otherwise you will run into unexpected problems. Try @JordanCClark’s suggestion and see if that fixes things.

---

<div class="post-metadata">

**Author:** ![JordanCClark](https://sea1.discourse-cdn.com/inductiveautomation/user_avatar/forum.inductiveautomation.com/jordancclark/32/83362_2.png) [@JordanCClark](https://forum.inductiveautomation.com/u/JordanCClark)\
**Post date:** [November 23, 2021, 8:22pm UTC](https://forum.inductiveautomation.com/t/script-using-shutil-issue/53403/11 "2021-11-23T20:22:54Z")

</div>

Also are you trying to move just files or directories as well?

---

<div class="post-metadata">

**Author:** ![vasilevdim](https://avatars.discourse-cdn.com/v4/letter/v/7ba0ec/32.png) [@vasilevdim](https://forum.inductiveautomation.com/u/vasilevdim)\
**Post date:** [November 23, 2021, 8:25pm UTC](https://forum.inductiveautomation.com/t/script-using-shutil-issue/53403/12 "2021-11-23T20:25:08Z")

</div>

Not moving files and directories, just copy and rename a file that match a given name , in the same directory.

---

<div class="post-metadata">

**Author:** ![bkarabinchak.psi](https://sea1.discourse-cdn.com/inductiveautomation/user_avatar/forum.inductiveautomation.com/bkarabinchak.psi/32/83567_2.png) [@bkarabinchak.psi](https://forum.inductiveautomation.com/u/bkarabinchak.psi)\
**Post date:** [November 23, 2021, 8:32pm UTC](https://forum.inductiveautomation.com/t/script-using-shutil-issue/53403/13 "2021-11-23T20:32:42Z")

</div>

Taking a step back, if you do

```auto
import os
print str(type(os))

```

Do you see

`<type 'module'>`  
or something closer to this  
`<type 'com.inductiveautomation.ignition.designer.gui.tools.jythonconsole.JythonConsole$ConsoleModule'>`

---

<div class="post-metadata">

**Author:** ![vasilevdim](https://avatars.discourse-cdn.com/v4/letter/v/7ba0ec/32.png) [@vasilevdim](https://forum.inductiveautomation.com/u/vasilevdim)\
**Post date:** [November 23, 2021, 8:45pm UTC](https://forum.inductiveautomation.com/t/script-using-shutil-issue/53403/14 "2021-11-23T20:45:43Z")

</div>

> [@bkarabinchak.psi](#):
>
> ```python
> import os
> print str(type(os))
> 
> ```

I see :

 ![image](https://us1.discourse-cdn.com/inductiveautomation/original/3X/6/b/6b87a7952a43d1c5d38a34024739b3861b39e4b1.png)

Anyway, I did what Jordan said, and now it works. Thank you!!!

---

<div class="post-metadata">

**Author:** ![bkarabinchak.psi](https://sea1.discourse-cdn.com/inductiveautomation/user_avatar/forum.inductiveautomation.com/bkarabinchak.psi/32/83567_2.png) [@bkarabinchak.psi](https://forum.inductiveautomation.com/u/bkarabinchak.psi)\
**Post date:** [November 24, 2021, 1:59pm UTC](https://forum.inductiveautomation.com/t/script-using-shutil-issue/53403/15 "2021-11-24T13:59:51Z")

</div>

Yea makes sense. Glad it was resolved. Generally speaking, if a word is highlighted in a special color, don’t use it as a variable name as it’s a reserved python keyword.
