Python - Проблемы с открытием файла с пробелами - PullRequest
0 голосов
/ 09 октября 2019

Итак, я пытаюсь открыть несколько файлов в папке «папка подсети». Тем не менее, он не позволяет мне открыть конкретный файл, который содержит пробелы

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

Это ошибка, которую я получаю:

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

Файл определенно там, поэтому яЯ не уверен, в чем проблема.

Любая помощь приветствуется. Спасибо

Ответы [ 3 ]

2 голосов
/ 09 октября 2019

Пробелы здесь не проблема;относительные пути:.

os.listdir выдает только имена файлов, а не путь относительно вашего текущего рабочего каталога. Если вы хотите открыть файл, вам нужно использовать относительный путь.

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

Обратите внимание, что вам на самом деле не нужно использовать cwd здесь, так как listdir и open ужеинтерпретировать относительные пути к вашему текущему рабочему каталогу.

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

Или сначала измените свой рабочий каталог. Тогда само имя файла будет допустимым относительным путем для open.

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

Наконец, вы можете вообще избежать os.listdir, потому что если объект Path ссылается на каталог, вы можетеперебирать его содержимое напрямую. Эта итерация приводит к серии Path экземпляров, каждый из которых имеет метод open, который можно использовать вместо обычной функции open.

for filename in (pathlib.Path.cwd() / "Subnet Folder").iterdir():
    f = filename.open(...)
1 голос
/ 09 октября 2019

filename заканчивается относительно вашего CWD, поэтому вы хотите сделать что-то вроде

folder = pathlib.Path.cwd() / "Subnet folder"
for filename in os.listdir(folder):
    f = open(folder / filename, 'r', encoding="ISO-8859-1")
1 голос
/ 09 октября 2019

Похоже, вам нужно добавить Subnet Folder перед именем файла. Вы можете использовать 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")
...