Python can't read shapefile

There's a trap for first time users of shapefiles. The actual shapefile (.shp) is useless without the companion files: .dbf, .shx, .prj etc..

This is outlined in the shapefile technical specification but that's a bit advanced, the Esri article might be more suitable for a quick explanation.

It is critical that all the files belonging to a shapefile are treated as a single unit. If the shapefile is edited at any stage, even just attribute changes, the FIDs (feature identifiers) change, which means the order in the .DBF file is changed.. should you edit a shapefiles' attributes and only copy the .DBF file, overwriting an existing .DBF file the shapes will point to the wrong rows. Always copy ALL the files together.

When sending a shapefile by email, Dropbox, Google Drive etc. I find it expedient to zip all the files into a single archive so that when it is unzipped all associated files appear together.