【问题标题】:Python get filepathPython 获取文件路径
【发布时间】:2021-09-10 13:00:57
【问题描述】:

我正在尝试创建一个简单的脚本来将选定文件的文件路径(在 Windows 资源管理器中)复制到 python 中的剪贴板。 我一直在查看pypercliptkinter,但我不确定如何进行。

tkinter 中的 askopenfilename 看起来很有希望,但我想选择 python 之外的文件,然后通过 windows 上下文菜单调用脚本。


编辑:

我想创建一个脚本,当我使用 Windows 上下文菜单(右键单击)复制它时,它可以将本地文件路径更改为网络路径。

例如在 Windows 资源管理器中右键单击我的文件 C:\Users\LocalUser\test.txt 时,我想添加一个下拉选项来复制文件路径,但将目录更改为例如D:\Users\LocalUser\test.txt.

我正在考虑通过在 RegEdit 中添加新键并在 Computer\HKEY_CLASSES_ROOT\*\shell 中添加 python 脚本的快捷方式来添加上下文菜单选项,但为了这样做,我需要能够复制添加文件路径先到我的剪贴板。

【问题讨论】:

  • 到目前为止你得到了什么? tkinter 可以处理对话框并将文件路径粘贴到剪贴板。也许你也可以描述你的用例,我不确定你的最终结果是什么。
  • 到目前为止,我真的什么都没有,因为我不知道如何从 Windows 资源管理器中获取文件路径。但请参阅添加到原始主题的编辑以获得更具描述性的工作流程
  • 只需创建一个 python 脚本,使用 pyperclip 模块将传递的命令行参数复制到剪贴板。然后创建上下文菜单项以将所选文件作为命令行参数执行 python 脚本。

标签: python tkinter copy clipboard filepath


【解决方案1】:

simple_upload.html

{% extends 'base.html' %}

{% load static %}

{% block content %}
  <form method="post" enctype="multipart/form-data">
    {% csrf_token %}
    <input type="file" name="myfile">
    <button type="submit">Upload</button>
  </form>

  {% if uploaded_file_url %}
    <p>File uploaded at: <a href="{{ uploaded_file_url }}">{{ uploaded_file_url }}</a></p>
  {% endif %}

  <p><a href="{% url 'home' %}">Return to home</a></p>
{% endblock %}

views.py

from django.shortcuts import render
from django.conf import settings
from django.core.files.storage import FileSystemStorage

def simple_upload(request):
    if request.method == 'POST' and request.FILES['myfile']:
        myfile = request.FILES['myfile']
        fs = FileSystemStorage()
        filename = fs.save(myfile.name, myfile)
        uploaded_file_url = fs.url(filename)
        return render(request, 'core/simple_upload.html', {
            'uploaded_file_url': uploaded_file_url
        })
     return render(request, 'core/simple_upload.html')

文件会被复制到基础文件夹中,可以通过指定文件夹名称复制到指定文件夹中

filename = fs.save('folderName/'+ myfile.name, myfile)

【讨论】:

    【解决方案2】:

    你是对的,要在 windows 上下文菜单中添加一些东西,你需要编辑 windows 注册表编辑器。

    要在剪贴板中复制文件位置,您可以使用 pyperclip 但这只能使用 tkinter 来完成:

    from tkinter import Tk, filedialog
    
    r = Tk()
    r.withdraw()
    filename = filedialog.askopenfilename()
    #print(filename)
    r.clipboard_clear()
    r.clipboard_append(filename)
    r.update() # now it stays on the clipboard after the window is closed
    r.destroy()
    

    您可以做的是,在文件资源管理器中,右键单击,然后在上下文菜单中,将有一个选项(例如,“复制文件的文件位置”),您可以使用注册表添加编辑。然后单击该选项,将打开另一个file dialog,然后将您选择的任何文件的位置复制到剪贴板。


    编辑:仅在上下文菜单中添加“复制路径”选项:

    Reference

    在注册表编辑器中,对于HKEY_CLASSES_ROOT\*\shell\Copy Path\command 中的文件和HKEY_CLASSES_ROOT\Directory\shell\Copy Path\command 中的文件夹,通过将(默认)的值设置为来添加以下命令

    cmd.exe /c (echo.|set /p=%1) | clip
    

    就是这样,不用python,只使用默认的命令行解释器,就可以复制windows中文件/文件夹的完整路径。

    【讨论】:

    • 我在 google 上找到了类似的代码片段,但我想避免使用辅助文件对话框,因为那种 og 违背了将其添加到上下文菜单的目的。它应该尽可能简单,并且由于其他小程序使用类似的工作流程而没有辅助对话框,我想它也应该可以用 Python 编码。
    • 好吧,在这种情况下,您甚至不需要添加 python 脚本,您只需使用 Windows 注册表编辑器中的默认命令行解释器就可以做到这一点。让我编辑我的答案。
    • 啊,太好了,我快到了,谢谢!有没有办法把 'cmd.exe /c (echo.|set /p=%1) |剪辑'成一个bat文件并通过regedit运行它?这样我就可以将路径保存到剪贴板并通过 python 运行它来操作字符串并在之后再次将其保存到剪贴板
    • 希望 this link 有所帮助。
    • 通过一百万个谷歌搜索,我发现仅使用“&”就可以让您在 regedit 中一个接一个地放置更多命令。它现在按预期工作。非常感谢您的帮助!
    猜你喜欢
    • 2014-03-19
    • 2017-11-03
    • 2021-11-02
    • 2023-04-05
    • 1970-01-01
    • 2012-10-05
    • 2011-11-16
    • 2023-04-03
    相关资源
    最近更新 更多