我正在尝试从vimeo下载视频(使用此代码https://github.com/moettle/hidden-vimeo-downloader,并对请求会话信息进行了一些修改),并在编写部分文件中,我收到一条 [Errno 22] 消息,就好像
with open(PATH, "wb")
将反斜杠读为双反斜杠
即:如果 PATH 类似于“folder ilename.txt”,则终端的输出显示 OSError:[Errno 22]无效参数:“文件夹 ilename.txt”
这是我的代码:
r = requests.get(current_segement_url)
v_seg_file = os.path.join(out_video ,"video-" + segment_base_name + str(i) + segment_base_ext)
# Just to print out the actual variable's content
print(v_seg_file)
with open(v_seg_file, "wb") as f:
f.write(r.content)
(我已经将路径分离到
v_seg_file
,以查看 .encode() 方法或使用替换字符串或原始字符串是否可以工作,但事实并非如此。)
当前输出为:
segments_video_8cf150a5-2ce1-4adc-bb37-111111111111\video-segment-0.m4s?r=11111111dHJhbDE%3D Traceback (most recent call last): File "C:\Users\XXXXX\.......\hidden-vimeo-downloader\vimeo-downloader.py", line 78, in <module> with open(v_seg_file, "wb") as f: ^^^^^^^^^^^^^^^^^^^^^^ OSError: [Errno 22] Invalid argument: 'segments_video_8cf150a5-2ce1-4adc-bb37-111111111111\\video-segment-0.m4s?r=11111111dHJhbDE%3D'
(这里修改了实际的文件路径,但是是代码自动生成的)
问题是:为什么我无法创建文件? 上面的一些行,如果目录不存在,则创建该目录。 我也尝试过写“wb”,“wb+”,“w+b”,但没有成功
我认为问题在于
with open(
这里以某种方式将单个反斜杠转换为两个?
我的意思是,v_seg_file
的打印输出是可以的,它是用os.path.join
创建的(应该没问题)
我还尝试了另一个脚本来测试此写入语句,就像双重检查一样,它对于非二进制写入效果很好。
import os
out_video = "folder"
segment_base_name = "xxx"
segment_base_ext = "yyy"
i = 0
v_seg_file = os.path.join(out_video ,"video-" + segment_base_name + str(i) + segment_base_ext)
print(v_seg_file)
if not os.path.exists(out_video):
os.makedirs(out_video)
print("Directory created successfully!")
else:
print("Directory already exists!")
with open(v_seg_file, "w") as f:
f.write("file written")
(结果:文件
folder\video-xxx0yyy
创建时没有任何问题,并且仅包含一行文本“文件已写入”)
这可能是 BINARY 编写的平台问题吗?我在 Windows 机器本地运行此代码,但昨天我在 Github 代码空间(使用另一个视频 URL)运行它并且工作正常。
使用原始字符串。 例子:
file path = r".\your-path"