File not found error in custom dataset

I’m trying to train a CNN in PyTorch to recognise road signs from the GTSRB dataset. I keep getting this error:

FileNotFoundError                         Traceback (most recent call last)
<ipython-input-7-6a0d3ee5f434> in <module>
      3 #roadSignTrain = torchvision.datasets.ImageFolder(root='/Users/username/Downloads/roadSigns/train', transform = transform)
----> 4 roadSignTrain = RoadSignDataset(csv_path=r'/Users/username/Downloads/GTSRB/Train/*/*.csv')
      5 trainloader =, batch_size=10, shuffle=True, num_workers=0)
<ipython-input-5-a0c6c7375def> in __init__(self, csv_path)
     22         self.to_tensor = transforms.ToTensor()
     23         #read the CSV file
---> 24         self.data_info = pd.read_csv(csv_path, header=None)
     25         #first column contains the image paths
     26         self.image_arr = np.asarray(self.data_info.iloc[:, 0])
~/opt/anaconda3/lib/python3.8/site-packages/pandas/io/ in read_csv(filepath_or_buffer, sep, delimiter, header, names, index_col, usecols, squeeze, prefix, mangle_dupe_cols, dtype, engine, converters, true_values, false_values, skipinitialspace, skiprows, skipfooter, nrows, na_values, keep_default_na, na_filter, verbose, skip_blank_lines, parse_dates, infer_datetime_format, keep_date_col, date_parser, dayfirst, cache_dates, iterator, chunksize, compression, thousands, decimal, lineterminator, quotechar, quoting, doublequote, escapechar, comment, encoding, dialect, error_bad_lines, warn_bad_lines, delim_whitespace, low_memory, memory_map, float_precision)
    684     )
--> 686     return _read(filepath_or_buffer, kwds)
~/opt/anaconda3/lib/python3.8/site-packages/pandas/io/ in _read(filepath_or_buffer, kwds)
    451     # Create the parser.
--> 452     parser = TextFileReader(fp_or_buf, **kwds)
    454     if chunksize or iterator:
~/opt/anaconda3/lib/python3.8/site-packages/pandas/io/ in __init__(self, f, engine, **kwds)
    944             self.options["has_index_names"] = kwds["has_index_names"]
--> 946         self._make_engine(self.engine)
    948     def close(self):
~/opt/anaconda3/lib/python3.8/site-packages/pandas/io/ in _make_engine(self, engine)
   1176     def _make_engine(self, engine="c"):
   1177         if engine == "c":
-> 1178             self._engine = CParserWrapper(self.f, **self.options)
   1179         else:
   1180             if engine == "python":
~/opt/anaconda3/lib/python3.8/site-packages/pandas/io/ in __init__(self, src, **kwds)
   2006         kwds["usecols"] = self.usecols
-> 2008         self._reader = parsers.TextReader(src, **kwds)
   2009         self.unnamed_cols = self._reader.unnamed_cols
pandas/_libs/parsers.pyx in pandas._libs.parsers.TextReader.__cinit__()
pandas/_libs/parsers.pyx in pandas._libs.parsers.TextReader._setup_parser_source()
FileNotFoundError: [Errno 2] No such file or directory: '/Users/username/Downloads/GTSRB/Train/*/*.csv'

The thing is, I’ve got the images and CSV in the right place. My GTSRB folder is in the downloads, and there are Train and Test folders (yes, spelled correctly).
The Train folder contains subfolders containing all of the images from a certain class, with a CSV file with their filename (within the folder, no path) and class.
The Test folder contains all of the test images, with a CSV file with their filename (within the folder, no path) and class.
Can someone let me know what’s going wrong?

transform = transforms.Compose([transforms.ToTensor(), transforms.Normalize((0.5,0.5,0.5), (0.5,0.5,0.5), (0.5,)), transforms.Resize((48,48))])

roadSignTrain = RoadSignDataset(csv_path='/Users/username/Downloads/GTSRB/Train/*/*.csv')
trainloader =, batch_size=10, shuffle=True, num_workers=0)

roadSignTest = RoadSignDataset(csv_path='/Users/username/Downloads/GTSRB/Test/*.csv')
testloader =, batch_size=10, shuffle=True, num_workers=0)

Realised I forgot to add the code for the custom dataset. Here it is:

class RoadSignDataset(Dataset):

    def __init__(self, csv_path):
        self.to_tensor = transforms.ToTensor()
        #read the CSV file
        self.data_info = pd.read_csv(csv_path, header=None)
        #first column contains the image paths
        self.image_arr = np.asarray(self.data_info.iloc[:, 0])
        #second column is the labels
        self.label_arr = np.asarray(self.data_info.iloc[:, 7])
        #calculate len
        self.data_len = len(self.data_info.index)

    def __getitem__(self, index):
        #get image name from the pandas df
        single_image_name = '' + self.image_arr[index]
        #open image
        img_as_img =

        #transform image to tensor
        img_as_tensor = self.to_tensor(img_as_img)

        #get label of the image based on the cropped pandas column
        single_image_label = self.label_arr[index]
        return(img_as_tensor, single_image_label)

    def __len__(self):
        return self.data_len

pd.read_csv expects a path to a valid csv file, while you are trying to pass a path containing wildcards.