微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

下载文件夹的自动管理器导致所有 chrome 下载失败

如何解决下载文件夹的自动管理器导致所有 chrome 下载失败

我对编程还很陌生,因此决定编写一个脚本,既可以使我个人受益,又可以测试我的能力。我创建了一个脚本,它使用看门狗来跟踪我机器上的下载文件夹。我想让它尽可能动态,这样理论上我就可以将程序提供给朋友,他们可以将他们想要的路径输入到它附带的 .txt 文件中,并且它会继续为他们无缝地工作。从某种意义上说,我的程序正在运行;如果我将图片文件一个文件夹拖到下载文件夹中,它会自动将其发送到图片文件夹。我的问题出现在新的下载中。每当我在脚本运行时尝试在 chrome 上下载图片时,我都会收到“失败 - 下载错误”。几个小时以来,我一直试图弄清楚这是什么,最后决定尝试寻求一些建议。

from watchdog.observers import Observer
from watchdog.events import FileSystemEventHandler
import os
import time
from shutil import move


paths_dict = {'dl_path': [],'img_path': [],'audio_path': [],'vid_path': [],'doc_path': [],'exe_path': [],'zip_path': [],'other_path': []}
keys = list(paths_dict.keys())

val_list = []
p_len = len(paths_dict.keys())


with open('config.txt','r') as paths:
    for line in paths.readlines():
        line.strip()
        split = list(line.split())
        path = split[-1]
        val_list.append(path)

    while p_len != 0:
        for k in keys:
            paths_dict[k].append(val_list[0])
            val_list.remove(val_list[0])
            p_len -= 1

image_formats = ["jpg","png","jpeg","gif","webp","tiff","bmp","heif","jfif","bat","tiff"]
audio_formats = ["mp3","wav","ogg","flac","m4a","aac"]
video_formats = ["mp4","avi","webm","mov",'mkv']
docs_formats = ["ai","ait","rtf","txt","doc","docx","pdf"]
executables = ["exe"]
zip_folders = ["zip","tar","gz","7z"]


class MyHandler(FileSystemEventHandler):
    def on_any_event(self,event):

        for file in os.listdir(paths_dict['dl_path'][0]):
            extension = (file.split('.')[-1].lower())
            src = paths_dict['dl_path'][0] + '\\' + file

            if extension in image_formats:
                folder_dst = paths_dict['img_path'][0]
                new_dst = folder_dst + '\\' + file
                move(src,new_dst)

            elif extension in video_formats:
                folder_dst = paths_dict['vid_path'][0]
                new_dst = folder_dst + '\\' + file
                move(src,new_dst)

            elif extension in docs_formats:
                folder_dst = paths_dict['doc_path'][0]
                new_dst = folder_dst + '\\' + file
                move(src,new_dst)

            elif extension in executables:
                folder_dst = paths_dict['exe_path'][0]
                new_dst = folder_dst + '\\' + file
                move(src,new_dst)

            elif extension in zip_folders:
                folder_dst = paths_dict['zip_path'][0]
                new_dst = folder_dst + '\\' + file
                move(src,new_dst)

            else:
                folder_dst = paths_dict['other_path'][0]
                new_dst = folder_dst + '\\' + file
                move(src,new_dst)


event_handler = MyHandler()
observer = Observer()
observer.schedule(event_handler,paths_dict['dl_path'][0],recursive=False)
observer.start()

try:
    while True:
        time.sleep(5)
except KeyboardInterrupt:
    observer.stop()
observer.join()

这是我的 .txt 文件中包含的内容

Path to downloads folder: C:\Users\12483\Downloads
Path of where downloaded image files are to be stored: C:\Users\12483\Pictures
Path of where downloaded audio files are to be stored: C:\Users\12483\Music
Path of where downloaded video files are to be stored: C:\Users\12483\Videos
Path of where downloaded document files are to be stored: C:\Users\12483\Documents
Path of where downloaded executable files are to be stored: C:\Users\12483\exe_files
Path of where downloaded zip files are to be stored: C:\Users\12483\zip_files
Path of where all other file types are to be stored: C:\Users\12483\misc_files

解决方法

这其实是一个很酷的想法...

作为对使用 python 进行文件管理没有太多经验的人。我不认为我能够胜任地直接修改你的代码,但我有一个理论。

当浏览器开始下载文件时,它首先创建一个模板,该模板只是文件的一部分,称为 .part 文件。

https://fileinfo.com/extension/part#:~:text=A%20PART%20file%20is%20a,program%20that%20started%20the%20download.

我假设您的 Python 脚本正在尝试在下载完成之前组织此文件。

所以解决方案(理论上)是修改你的脚本以等待 .part 文件成为正确的类型,也许通过忽略带有 .part 的文件

编辑:

我需要橡皮鸭提出另一种我们想要忽略的部分文件。(.crdownload)很容易有更多。

这是一种可能的解决方案:

声明

partial_files = ["crdownload","part"]

然后在你的 for 循环中:

            elif extension in zip_folders:
                folder_dst = paths_dict['zip_path'][0]
                new_dst = folder_dst + '\\' + file
                move(src,new_dst)

            # new code
            elif extension in partial_files:
                 pass # this essentially means do nothing
            # /new code
            else:
                folder_dst = paths_dict['other_path'][0]
                new_dst = folder_dst + '\\' + file
                move(src,new_dst)

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。