gpt4 book ai didi

Python - 创建目录并移动特定文件

转载 作者:行者123 更新时间:2023-11-28 21:27:51 27 4
gpt4 key购买 nike

更好地学习和理解 Python 我想编写一个基于 youtube-dl 的脚本,用于下载播放列表并将所有这些 flv 视频移动到特定目录中。

到目前为止,这是我的代码:

import shutil
import os
import sys
import subprocess
# Settings
root_folder = 'C:/Users/Robert/Videos/YouTube/Playlists/$s'

def download():
files = open('Playlists.txt').readlines()

for playlist in files:
p = playlist.split(';')

# Create the directory for the playlist if it does not exist yet
if not os.path.exists (root_folder % p[0]):
os.makedirs(root_folder % p[0])

# Download every single video from the given playlist
download_videos = subprocess.Popen([sys.executable, 'youtube-dl.py', ['-cit'], [p[1]]])
download_videos.wait()

# Move the video into the playlist folder once it is downloaded
shutil.move('*.flv', root_folder % p[0])


download()

我的 Playlists.txt 的结构如下所示:

Playlist name with spaces;http://www.youtube.com/playlist?list=PLBECF255AE8287C0F&feature=view_all

我遇到了两个问题。首先,字符串格式不起作用。

我得到错误:

Playlist name with spaces
Traceback (most recent call last):
File ".\downloader.py", line 27, in <module>
download()
File ".\downloader.py", line 16, in download
if not os.path.exists (root_folder % p[0]):
TypeError: not all arguments converted during string formatting

有人能解释一下原因吗?当我打印 p[0] 时,一切看起来都很好。

其次,我不知道如何设置正确的 shutil.move 命令以仅移动刚刚下载的 flv 视频。我该如何过滤?

谢谢!

最佳答案

免责声明:我不是在 windows 上

重点是你应该使用os.path.join()用于加入路径。

但是这个字符串似乎有几个问题:

root_folder = 'C:/Users/Robert/Videos/YouTube/Playlists/$s'

我认为:

  • 您需要使用双重转义反斜杠。
  • 你的意思是 %s 而不是 $s
  • 无论如何都不需要%sos.path.join()是加入路径的跨平台方式。
  • [可选] imho backsleshes 更具可读性。

所以我会说您需要将该行更改为:

root_folder = 'C:/Users/Robert/Videos/YouTube/Playlists'

root_folder = 'C:\\Users\\Robert\\Videos\\YouTube\\Playlists'

root_folder = r'C:\Users\Robert\Videos\YouTube\Playlists'

然后做类似的事情:

my_path = os.path.join(root_folder, p[0])
if not os.path.exists(my_path):
# ...

注:来自官方os.path.join() doc :

Note that on Windows, since there is a current directory for each drive, os.path.join("c:", "foo") represents a path relative to the current directory on drive C: (c:foo), not c:\foo.

根据有用的判断Spencer Rathbun例如,在 Windows 上你应该得到:

>>> os.path.join('C', 'users')
'C\\users'
>>> os.path.join('C:','users')
'C:users'

这意味着您必须使用以下其中一项:

>>> os.path.join('C:/', 'users')
'C:\\users'
>>> os.path.join(r'C:\', 'users')
'C:\\users'

关于Python - 创建目录并移动特定文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9717411/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com