首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >无法使用send2trash删除文件

无法使用send2trash删除文件
EN

Stack Overflow用户
提问于 2020-09-08 21:47:55
回答 1查看 56关注 0票数 0
代码语言:javascript
运行
复制
import PyPDF2, os, sys, send2trash,pathlib


def encrypt(filename, password):
    with open(filename, "rb") as readfile:
        reader = PyPDF2.PdfFileReader(readfile)
        writer = PyPDF2.PdfFileWriter()
        if not reader.isEncrypted:
            for page in range(reader.numPages):
                writer.addPage(reader.getPage(page))
        else:
            print(f"{filename} is encrypted")
            return None
    with open(f"{filename.split('.')[0]}_encrypted.pdf", "wb") as writefile:
        writer.encrypt(password)
        try:
            writer.write(writefile)
        except OSError as e:
            print(f"File write error {e}")
            return None
    with open(f"{pathlib.Path(filename).parent}\{pathlib.Path(filename).stem}_encrypted.pdf", "rb") as checkfile:
        result = PyPDF2.PdfFileReader(checkfile).decrypt(password)
    if result != 0:
        try:
            send2trash.send2trash(filename)
            print(f"file {filename} was deleted after encrypted file verification")
            return "Done"
        except OSError as e:
            print(f"Delete error: {e}, filename: {filename}")
    else:
        print("Encrypted file %s was not verified so original file %s was not deleted" % (f"{filename.split('.')[0]}_encrypted.pdf", filename))
        return None


def decrypt(filename, password):
    with open(filename, "rb") as readfile:
        reader = PyPDF2.PdfFileReader(readfile)
        writer = PyPDF2.PdfFileWriter()
        if not reader.isEncrypted:
            print(f"{filename} is not_encrypted")
            return None
        else:
            result = reader.decrypt(password)
            if result == 0:
                print(f"{filename} was not decrypted with password: {password}")
                return None
            else:
                for page in range(reader.numPages):
                    writer.addPage(reader.getPage(page))
                try:
                    with open(f"{filename}_decrypted.pdf", "wb") as writefile:
                        writer.write(writefile)
                except OSError as e:
                    print(f"File write error {e}")
                    return None
                return "Done"


# password = sys.argv[1]
# option = sys.argv[2]
password = "test"
option = "decrypt"
if option not in ["encrypt", "decrypt"]:
    sys.exit(f"Wrong option, option provided is {option}, supposed to be encrypt or decrypt")
folder_path = os.path.abspath(input("Please enter the path"))
if os.path.exists(folder_path):
    for folder, subfolders, files in os.walk(folder_path):
        pdfs = filter(lambda x: str(x).lower().endswith(".pdf"), files)
        for file in pdfs:
            filename = os.path.join(folder, file)
            reader = PyPDF2.PdfFileReader(open(filename, "rb"))
            encrypt(filename, password) if option == "encrypt" else decrypt(filename, password)
else:
    print(f"{folder_path} doesnt exist, exiting")
    sys.exit(f"{folder_path} not found")

你好!上面的代码不会用send2trash删除.pdf文件。

文件似乎是关闭的,如果我复制加密功能到另一个文件并单独运行它-它删除了提供的文件-没有问题。但是在这个脚本中,我得到了win32 None错误-它只是拒绝删除任何文件。

有没有人能指出我遗漏的地方?非常感谢!

PS它应该遍历文件夹(子文件夹),查找.pdf文件并加密/解密它们。

EN

回答 1

Stack Overflow用户

发布于 2020-09-08 22:30:02

找到问题了,对不起:P

reader = PyPDF2.PdfFileReader(open(filename,"rb"))

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63795303

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档