Как указать windows путь к каталогу в os.listdir (путь)? - PullRequest
0 голосов
/ 19 апреля 2020

Пока я пытаюсь указать windows путь к каталогу в os.listdir (), он выдает ошибку. Мой фрагмент кода:

with os.listdir('C:\Users\Hp\Desktop\video') as entries:

Я знаю, что python принимает '\' в качестве escape-последовательности, но я не могу найти никакой альтернативы для windows. Выдана ошибка:

SyntaxError: (unicode error) 'unicodeescape' codec can't decode bytes in position 2-3: truncated \UXXXXXXXX

Я пробовал следующие решения, но это дало мне еще одну ошибку: -

AttributeError: __enter__

Есть ли проблемы с моим кодом:

import os
import moviepy.editor as mp

#location = os.path.join("C:", "Users", "Hp", "Desktop", "video")

with os.listdir("C:\\Users\\Hp\\Desktop\\video") as entries:
    for entry in entries:
        if(".py" or ".png") not in entry:
            video = mp.VideoFileClip("entry.name")

            logo = (mp.ImageClip("logo.png")
                      .set_duration(video.duration)
                      .resize(height=50) # if you need to resize...
                      .margin(right=8, top=8, opacity=0) # (optional) logo-border padding
                      .set_pos(("right","top")))

            final = mp.CompositeVideoClip([video, logo])
            final.write_videofile('o' + "entry.name")

Ответы [ 4 ]

1 голос
/ 19 апреля 2020

Либо используйте необработанные строки, которые игнорируют обратную косую черту sh, в качестве escape-символа

with os.listdir(r'C:\Users\Hp\Desktop\video') as entries:

Или используйте буквальную обратную косую черту sh (экранированная обратная косая черта sh)

with os.listdir('C:\\Users\\Hp\\Desktop\\video') as entries:

Или просто используйте косую черту. Они работают повсюду в Windows.

with os.listdir('C:/Users/Hp/Desktop/video') as entries:
0 голосов
/ 19 апреля 2020

Лучше использовать библиотеку pathlib python. Такие вопросы решаются в нем очень хорошо.

from pathlib import Path
p = Path('C:\Users\Hp\Desktop\video') # Use any format
for file in p.iterdir():
    # Every 'file' is a 'Path' variable with full path
    file.name # Returns full filename
    file.suffix # Returns extension. e.g. '.jpg'
    str(file) # Returns path as python string

См. здесь , чтобы узнать больше.

0 голосов
/ 19 апреля 2020
import os
import moviepy.editor as mp

path="C:\\Users\\Hp\\Desktop\\video"

entries=os.listdir(path)
for entry in entries:
    if(".py" or ".png") not in entry:
        video = mp.VideoFileClip("entry.name")

        logo = (mp.ImageClip("logo.png")
                .set_duration(video.duration)
                .resize(height=50) # if you need to resize...
                .margin(right=8, top=8, opacity=0) # (optional) logo-border padding
                .set_pos(("right","top")))

        final = mp.CompositeVideoClip([video, logo])
        final.write_videofile('o' + "entry.name")
0 голосов
/ 19 апреля 2020

@ Адам Смит ответ правильный. Но я бы хотел указать на ошибку. os.listdir не возвращает менеджер контекста (просто обычный список), поэтому использование его с ключевым словом with бесполезно. Обычно вызывайте функцию.

entries = os.listdir('C:\Users\Hp\Desktop\video')

, и вы не получите ошибку AttributeError: __enter__.

with ключевое слово - это автоматический способ вызова obj.__enter__() перед блоком и obj.__exit__() после этого. Если объект (здесь список, возвращенный из os.listdir) не имеет этих методов, вы получите ошибку.

...