Looking to create a project which implements a user-space networking stack, so that a user space application has access to the network cards, I've never done this before and I was wondering if it would possible to get this close to the hardware using a language like python and, if not, which language would be best?
It's almost certainly possible to do, but depending on how far down you want to go, you will need to write some parts in another language. The authors of this paper [1] wrote a version of their user-space network driver in Python, but they used Cython for external memory management.
While using Python for this is probably possible, Python is much slower than many other languages. The authors of the paper I mentioned implemented their driver in 10 languages and compared them, and Python was the slowest—10 times slower than the next-slowest (but they do note (in [2]) that all of their drivers except the Python driver were optimized for performance).
Generally speaking, if you want to learn how to do systems programming, I recommend doing it in a systems language, like C or Rust. Traditionally, this type of code would most-often be written in C. If you want arguments in favor of using languages besides C, the same authors wrote this paper [2], which discusses why you would want to use higher-level languages (from Rust to Python) for writing a network driver.
In short, Python probably isn't the best language for this if you want it to be more than a toy project, but if you want to do it, the Python code from those papers is probably a good place to start on the lowest-level parts; in fact, the authors hoped to be helpful to others [2]:
We provide primitives for PCIe driver development in Python that we hope to be helpful to others as this is the first PCIe driver in Python to our knowledge.
P. Emmerich, M. Pudelko, S. Bauer, S. Huber, T. Zwickl, and G. Carle, "User Space Network Drivers," in ACM/IEEE Symposium on Architectures for Networking and Communications Systems (ANCS 2019), 2019. arXiv:1901.10664 [cs.NI]
P. Emmerich, S. Ellmann, F. Bonk, A. Egger, E. G. Sánchez-Torija, T. Günzel, S. Di Luzio, A. Obada, M. Stadlmeier, S. Volt, and G. Carle, "The Case for Writing Network Drivers in High-Level Programming Languages," in ANCS 2019. arXiv:1909.06344 [cs.NI]