`
cnDenis
  • 浏览: 100009 次
  • 来自: 广州
社区版块
存档分类
最新评论

利用tkFileDialog.askopenfilenames获取多个文件名

阅读更多

利用tkFileDialog.askopenfilenames获取多个文件名

by cnDenis http://cndenis.iteye.com 2012年12月27日

用Python写小脚本,要选择文件,最简单的方式莫过于使用内置的Tk的控件了。如果需要同时选择多个文件,可以使用tkFileDialog.askopenfilenames,如下:

1
2
3
4
#!/usr/bin/python
import tkFileDialog
fns = tkFileDialog.askopenfilenames(filetypes=[("text file", "*.txt"),("all","*.*")])
print(repr(fns))

但问题是,在Python 2.6以后的版本,tkFileDialog.askopenfilenames返回的居然是字符串,类似于这样:

1
u'C:/Python27/LICENSE.txt C:/Python27/NEWS.txt C:/Python27/README.txt'

如果每个文件的路径中都没有空格,用fps.split()就可以分解字符串得到文件名的列表,如果文件名或文件路径中包含空格,这个字符串将很不好解析。解决方法如下:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
#!/usr/bin/python
import Tkinter
import tkFileDialog
import os

master = Tkinter.Tk()
master.withdraw()  # 不显示界面主窗口

fnstr = tkFileDialog.askopenfilenames(filetypes=[("text file", "*.txt"),("all","*.*")])

fns = master.tk.splitlist(fnstr) # 把多个文件名字符串分割成元组

print(repr(fns))

这样得到的就是元组了,

1
('C:/Python27/LICENSE.txt', 'C:/Python27/NEWS.txt', 'C:/Python27/README.txt')

然后就可以用for得到每个文件名了。

如果文件名中包含中文,Tkinter.Tk.tk.splitlist分割完后的文件名可能会不能用,需要先把文件名encode后传进去,分割完再decode。代码如下:

1
2
3
4
5
import sys
sysencode = sys.getfilesystemencoding()
fnsen = fnstr.encode(sysencode)
fnss = master.tk.splitlist(fnsen)
fns = [unicode(f, encoding=sysencode) for f in fnss]

这样就可以了。

以上内容参考了:Parsing the results of askopenfilenames()? 和 tkinter - askopenfilenames returns string instead of tuple in windows 2.6.1 release

 

0
5
分享到:
评论

相关推荐

    文件下载response.setHeader()下载中文文件名乱码问题解决办法.pdf

    解决这个问题的方法是使用 email 附件名编码方法对文件名进行编码。可以使用 javax.mail.internet.* 包的 MimeUtility.encodeWord("中文.txt") 方法进行编码。例如: response.setHeader("Content-Disposition", ...

    FileTime.rar_jpg_文件名

    这个压缩包可能包含了一个或多个以日期命名的图片文件,这些文件原本可能以数字序列作为文件名,如100084.jpg,现在已被重命名为反映其拍摄日期的形式。 描述中提到的要点有: 1. **数字文件名**: 数码相机通常会...

    批量修改文件名脚本.rar

    而这个“批量修改文件名脚本”很可能是一个批处理文件(.bat),它利用了Windows内置的命令行工具来实现文件名的批量更改。 批处理脚本的工作原理是通过一系列命令行指令,如REN(rename)命令,来实现文件的重命名...

    提取文件名 VB获取无后缀文件名 VB获取有后缀文件名

    选择文件夹提取文件名 VB程序,可以获取无后缀文件名 也可以获取带后缀文件名 ,两种选择,供您选择——大吉利祝您工作愉快~~

    SimilarFileFind-v1.3.930亿愿相似文件名查找.7z

    本文将深入探讨"SimilarFileFind v1.3.930"这一版本的功能、工作原理以及如何有效地利用它来查找和管理相似文件名。 "SimilarFileFind"是一款专门用于查找并管理电脑中具有相似名称的文件的实用软件。它的主要功能...

    IIS短文件名漏洞利用工具.zip

    标题中的"IIS短文件名漏洞利用工具"指向的是一个针对微软Internet Information Services(IIS)服务器的安全漏洞。IIS是Windows操作系统中广泛使用的Web服务器,它处理HTTP、HTTPS和其他网络协议,为用户提供网页...

    getName.bat获取目录下的所有文件名

    bat命令,可以获取文件夹下所有文件的名字含后缀,也可以获取指定后缀的文件名,另存为LIST文本文件,非常方便好用的bat命令

    获取批量Word文件名,并批量删除其中的分隔符

    2. **遍历文件夹**:通过`Dir`函数读取第一个匹配`.doc`后缀的文件名,然后进入一个循环,该循环将持续执行直到没有更多的文件被找到。在这个过程中,每找到一个文件,就将其文件名添加到`Arr`数组中。 3. **输出...

    批量修改文件名工具.rar

    6. **批量修改文件名工具**:"批量修改文件名.exe" 这个文件可能是一个可执行程序,用于执行上述操作。这类工具通常具有用户友好的界面,允许用户选择待处理的文件夹,设定命名规则,然后一键应用。它们可能还支持...

    WINCC7.0sp2破解狗

    开始一个新项目,准备用wincc7.0做,自己下载了一个wincc 7.0 sp2,可惜装好后一直弹出对话框说只能用硬狗。网上找到一个破解办法,目前用得还不错,分享给大家 具体操作方法如下: C:\Program Files\Siemens\winCC...

    python根据多个文件名批量查找文件

    本篇文章主要介绍了如何利用Python语言,根据多个文件名批量查找文件,并将找到的文件复制到指定的目录中。这个过程涉及到Python基础库如os, numpy, pandas以及shutil的使用,并结合循环、条件判断等基础编程概念,...

    C# 获取系统字体名 和 对应字体的文件名

    在C#编程中,获取系统字体名及其对应的字体文件名是一项常见的任务,特别是在涉及到文本渲染、界面设计或者自定义字体管理的场景下。系统中的字体是操作系统提供的资源,可以通过编程接口来访问这些信息。以下是对这...

    Linux系统中获取路径的文件名的方法.docx

    Linux系统中获取路径的文件名的方法 Linux系统中获取路径的文件名有多种方法,以下是其中的两种常见方法: 1. 使用basename命令 basename命令可以将路径中的文件名提取出来,例如: [root@dabu.info ]#basename ...

    文件名.bat(获取文件夹下所有文件名)

    windows:获取文件夹下所有的文件名

    getfileattrib.rar_获取文件名

    引入了using System.IO 需要用到 FileInfo 类。 FileInfo 类用于提供创建、复制、删除、移动和打开文件的实例方法,并且帮助...获取文件名、文件长度、获取当前 FileSystemInfo 对象的创建时间、写入时间、访问时间。

    获取当前文件夹的文件名.rar

    标题中的“获取当前文件夹的文件名.rar”指的是一个压缩包,其中包含了一个批处理(.bat)文件,专门用于获取并记录指定文件夹内的所有文件名称。这种批处理脚本在Windows操作系统环境下运行,是一种简单的自动化...

    操作系统课程设计——文件管理系统

    一、课程设计题目和目的1二、课程设计要求1...重命名文件ren(文件名,新文件名)10(7) .查询文件属性ask(文件名)11(8) .关闭文件close(文件名)12五、程序运行结果及分析13六、课程设计总结15七、参考文献16八、附录17

    TimeBack.exe命令行工具获取和更改文件的创建、修改、访问时间

    命令行工具TimeBack.exe获取和更改文件的创建、修改、访问时间 TimeBack 1.0 文件时间控制 作者:Xinje E-mail:xinje@126.com 2010.6.16 /F [文件名] 设置欲更改或查看文件时间的文件名。 /T [日期时间] 欲更改的...

    vs2010拖拽文件获取文件名

    本示例程序"vs2010拖拽文件获取文件名"就是针对该平台设计的一个功能,允许用户通过拖放操作将文件从资源管理器直接拖入应用程序,从而获取这些文件的名称。这个功能大大提高了用户操作的便捷性,减少了在多个窗口...

    批量获取PPT文件名, 批量获取PPT文件名

    批量获取PPT文件名 批量获取PPT文件名 批量获取PPT文件名 批量获取PPT文件名 批量获取PPT文件名 批量获取PPT文件名 批量获取PPT文件名

Global site tag (gtag.js) - Google Analytics