Все просто: читаешь документацию по файловым системам, разбираешься как каждая из них хранит файлы и выполняет их удаление. Потом подключаешься к нужному жесткому диску в режиме прямого доступа к бинарному содержимому, определяешь тип файловой системы, проходишься по содержимому выявляя начало и конец файла, по сигнатуре заголовка определяешь тип - сохраняешь данные в файл, имя скорее всего потеряется, но не во всех файловых системах, также как сожержимое может оказаться частично перезаписанным.
Работать проще в linux - там жесткий диск и его разделы представленны в виде файловых нод и читаются обычной командой open() в бинарном режиме.
Можно конечно из питона запускать консольную утилиту, но это совсем не то - вдруг она чего пропустит?