Python获取文件路径

3
我正在尝试创建一个简单的脚本,以在Python中将所选文件(在Windows资源管理器中)的文件路径复制到剪贴板中。 我一直在研究pyperclip和tkinter,但我不确定如何确切地进行操作。
在tkinter中的askopenfilename看起来很有前途,但我想选择Python之外的文件,然后通过Windows上下文菜单调用该脚本。
编辑:
我想创建一个脚本,可以在使用Windows上下文菜单(右键单击)复制它时将本地文件路径更改为网络路径。
例如。 当在Windows资源管理器中右键单击我的文件C:\ Users \ LocalUser \ test.txt时,我想添加一个下拉选项以复制文件路径,但将目录更改为例如D:\ Users \ LocalUser \ test.txt。
我考虑通过在RegEdit中添加一个新键并在Computer \ HKEY_CLASSES_ROOT \ * \ shell中添加指向Python脚本的快捷方式来添加上下文菜单选项,但是为了这样做,我需要能够首先将文件路径复制到我的剪贴板中。

你目前有什么进展?tkinter可以处理对话框和将文件路径粘贴到剪贴板中。也许你还可以描述一下你的用例,我不确定你的最终结果意图是什么。 - scotty3785
到目前为止,我还没有任何东西,因为我无法弄清楚如何从Windows资源管理器中获取文件路径。但请查看原始主题中添加的编辑以获取更详细的工作流程说明。 - Martin
1
只需创建一个Python脚本,使用pyperclip模块将传递的命令行参数复制到剪贴板。然后创建上下文菜单项以使用所选文件作为命令行参数执行Python脚本。 - acw1668
2个回答

1
你是正确的,如果要在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()

当您在文件资源管理器中右键单击时,可以通过注册表编辑器添加选项(例如“复制文件位置”),然后在上面单击即可打开另一个文件对话框,在其中选择任何文件的位置将被复制到剪贴板中。请注意保留HTML标签。

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

参考

在注册表编辑器中,对于文件,在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中复制文件/文件夹的完整路径。


我在谷歌上找到了类似的代码,但我想避免使用二次文件对话框,因为这有点违背了将其添加到上下文菜单的目的。它应该尽可能简单,并且其他小程序使用类似的工作流程而没有二次对话框,我想应该也可以用Python编码。 - Martin
1
那么,在这种情况下,您甚至不需要添加Python脚本,您可以仅使用Windows注册表编辑器中的默认命令行解释器来完成。让我编辑我的答案。 - Kartikeya
太好了,我快完成了,谢谢! 有没有办法将“cmd.exe /c(echo.|set /p =%1)| clip”放入批处理文件中,并通过regedit运行它?这样我就可以将路径保存到剪贴板中,并通过Python运行它来操作字符串,然后再次保存到剪贴板中。 - Martin
希望这个链接有所帮助。 - Kartikeya
1
通过数百万次的谷歌搜索,我发现只需使用"&"符号即可在regedit中将更多命令放在一起。现在它已经按预期工作了。非常感谢您的帮助! - Martin

0

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)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接