Проблема с путем к файлу при удалении файла в Python - PullRequest
0 голосов
/ 26 ноября 2018

Попытка написать небольшой скрипт на Python для удаления файлов, но у функции os.remove возникают проблемы с путем к файлу.Обратите внимание, если я закомментирую os.remove("C:\\Users\The User\Downloads\test.txt"), он будет работать нормально и напечатает «ушел».Я не понимаю, почему при назначении пути к переменной это работает, но os.remove не нравится то же самое.

import os
import re

search ='test.txt'
path = "C:\\Users\The User\Downloads"


def find(search, path):
    for root, dirs, files in os.walk(path):
        if search in files:
           return True
        else:
           return False



result = find(search, path)
if(result == False):
    os.remove("C:\\Users\The User\Downloads\test.txt")
    print('gone')

Вот сообщение об ошибке:

OSError: [WinError 123] Неверный синтаксис имени файла, имени каталога или метки тома: 'C: \ Users \ The User \ Downloads \test.txt '

1 Ответ

0 голосов
/ 26 ноября 2018

Я думаю, вы должны просто вернуть полный путь к файлу для удаления, и если путь не None, то вызвать os.remove().В своем коде вы проверяете, что search существует в files, но files является списком, и вам нужно пройти и получить соответствующий файл, чтобы определить его текущий каталог.Затем вы можете получить полный путь, используя root, и использовать его позже для удаления.

Демонстрация:

from os import environ
from os import walk
from os import remove
from os.path import join

def find(search, path):
    for root, _, files in walk(path):

        # Go through each file
        for file in files:

            # Check if the file matches the search
            if file == search:

                # return full path
                return join(root, file)

# Get path if any
result = find(search="test.txt", path=join(environ["USERPROFILE"], "Downloads"))

# Only delete file if not None
if result:
    remove(result)
    print('Deleted', result)

Вы также можете использовать next(), чтобы сделать find() короче:

def find(search, path):
    for root, _, files in walk(path):
        return next((join(root, file) for file in files if file == search), None)

Примечание: Вы можете использовать os.path.join(os.environ['USERPROFILE'], 'Downloads') вместо жесткого кодирования C:\\Users\The User\Downloads.

...