Así que estoy intentando abrir varios archivos dentro de la carpeta "carpeta de subred". Sin embargo, no me permite abrir un archivo específico que contiene espacios en él

for filename in os.listdir(pathlib.Path.cwd() / "Subnet folder"):
    f = open(filename, 'r', encoding="ISO-8859-1")

Este es el error que recibo:

FileNotFoundError: [Errno 2] No such file or directory: '10.181.136.0  24.csv'

El archivo definitivamente está allí, así que no estoy seguro de cuál es el problema.

Cualquier ayuda es apreciada. Gracias

0
Afsheen Taheri 9 oct. 2019 a las 17:49

3 respuestas

La mejor respuesta

Los espacios no son el problema aquí; son caminos relativos.

os.listdir produce solo los nombres de los archivos, no una ruta relativa a su directorio de trabajo actual. Si desea abrir el archivo, debe usar la ruta relativa.

d = pathlib.Path.cwd() / "Subnet folder"
for filename in os.listdir(d):
    f = open(d / filename, 'r', encoding="ISO-8859-1")

Tenga en cuenta que en realidad no necesita usar cwd aquí, ya que tanto listdir como open ya interpretan las rutas relativas en su directorio de trabajo actual.

for filename in os.listdir("Subnet folder"):
    f = open(os.path.join("Subnet folder", filename), ...)

O cambie primero su directorio de trabajo. Luego, el nombre del archivo será una ruta relativa válida para open.

os.chdir("Subnet folder)
for filename in os.listdir():
    f = open(filename, ...)

Finalmente, puede evitar os.listdir por completo, porque si el objeto Path se refiere a un directorio, puede iterar sobre su contenido directamente. Esta iteración produce una serie de instancias Path, cada una de las cuales tiene un método open que se puede usar en lugar de la función ordinaria open.

for filename in (pathlib.Path.cwd() / "Subnet Folder").iterdir():
    f = filename.open(...)
2
chepner 9 oct. 2019 a las 15:08

Parece que necesita agregar Subnet Folder delante del nombre del archivo. Puedes usar os

import os
for filename in os.listdir(pathlib.Path.cwd() / "Subnet folder"):
    f = open(os.path.join("Subnet folder", filename), 'r', encoding="ISO-8859-1")
1
Mason Caiby 9 oct. 2019 a las 14:52

El filename termina siendo relativo a su CWD, por lo que desea hacer algo como

folder = pathlib.Path.cwd() / "Subnet folder"
for filename in os.listdir(folder):
    f = open(folder / filename, 'r', encoding="ISO-8859-1")
1
fuglede 9 oct. 2019 a las 14:52
58306849