Aquí está su respuesta sobre cómo atravesar un archivo de directorio grande por el archivo en Windows!
Busqué como un maníaco una DLL de Windows que me permita hacer lo que se hace en Linux, pero no tuve suerte.
Entonces, llegué a la conclusión de que la única manera es crear mi propia DLL que me exponga esas funciones estáticas, pero luego recordé los tipos de pywin. Y, YEEY! esto ya está hecho allí. ¡Y aún más, una función de iterador ya está implementada! ¡Guay!
Una DLL de Windows con FindFirstFile(), FindNextFile() y FindClose() puede estar todavía en algún lugar pero no la encontré. Entonces, utilicé los tipos de piroelectrones.
EDITAR: Estaban escondidos a plena vista en kernel32.dll. Por favor, mira la respuesta de ssokolow y mi comentario al respecto.
Lo siento por la dependencia. Pero creo que puede extraer win32file.pyd de la carpeta ... \ site-packages \ win32 y dependencias eventuales y distribuirlo independientemente de win32types con su programa si es necesario.
Encontré esta pregunta al buscar cómo hacer esto, y algunos otros también.
aquí:
How to copy first 100 files from a directory of thousands of files using python?
he publicado un código completo de la versión para Linux de listdir() de aquí (por Jason Orendorff) y con mi versión de Windows que presento aquí.
Cualquiera que desee una versión más o menos multiplataforma, vaya allí o combine dos respuestas usted mismo.
EDITAR: O mejor aún, use el módulo scandir o os.scandir() (en Python 3.5) y siguientes versiones. Es mejor que maneje los errores y algunas otras cosas también.
from win32file import FindFilesIterator
import os
def listdir (path):
"""
A generator to return the names of files in the directory passed in
"""
if "*" not in path and "?" not in path:
st = os.stat(path) # Raise an error if dir doesn't exist or access is denied to us
# Check if we got a dir or something else!
# Check gotten from stat.py (for fast checking):
if (st.st_mode & 0170000) != 0040000:
e = OSError()
e.errno = 20; e.filename = path; e.strerror = "Not a directory"
raise e
path = path.rstrip("\\/")+"\\*"
# Else: Decide that user knows what she/he is doing
for file in FindFilesIterator(path):
name = file[-2]
# Unfortunately, only drives (eg. C:) don't include "." and ".." in the list:
if name=="." and name=="..": continue
yield name
¿Quieres la funciones POSIX opendir/readdir, creo, pero yo don' Creo que están disponibles en la biblioteca estándar de Python. ¿Cuál es el procesamiento que planea hacer en los nombres de archivo? –