Sending list of patterns to copytree's ignore_patterns gives TypeError: unhashable type: 'list'

StackOverflow https://stackoverflow.com/questions/18304881

  •  24-06-2022
  •  | 
  •  

Question

I am working on a python script that throws a TypeError: unhashable type: 'list' when I try and use a list of extensions as copytree's ignore_patterns. I'm unsure, 1. Why this won't work, and 2. How to go about fixing it.

# allFileTypes is the list of all extensions in source_dir
# grabbed with function getFileExtList
allFileTypes = getFileExtList(source_dir)
# delete the blank file type
del allFileTypes[0]

#  Open a window to choose the files to copy
copyList = eg.multchoicebox(msg='Select the file types to copy',
                choices=(allFileTypes))

# List comprehension to make an ignore list for copytree
ignoreList = [x for x in allFileTypes if x not in copyList]


# Open a window to choose the destination directory
root_dir = eg.diropenbox(title='Choose Destination Directory')

# Take the basename of source_dir adding it to root_dir or os.mkdir will
# will break on the existing directory
dest_dir = os.path.join(root_dir, os.path.basename(source_dir))

# copytree everything from the source_dir to the dest_dir ignoring
# all files types not chosen from the list
copytree(source_dir, dest_dir, ignore=ignore_patterns(ignoreList))
Was it helpful?

Solution

copytree(source_dir, dest_dir, ignore=ignore_patterns(*ignoreList))

ignore_patterns receives a all the patterns as positional arguments, not as a list.

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top