from tkinter import *
from tkinter.filedialog import askdirectory,asksaveasfilename
def selectPath():
path_ = askdirectory() #获得选择好的文件夹
path.set(path_)
def savePath():
save_ = asksaveasfilename(
mode = 'w',
defaultextension = '.txt',
filetypes=(('tab delimited text file','*.txt'),('all files','*.*')))
path.set(save_)
root = Tk()
path = StringVar()
Label(root,text = "目标路径:").grid(row = 0, column = 0)
Entry(root, textvariable = path).grid(row = 0, column = 1)
Button(root, text = "路径选择", command = selectPath).grid(row = 0, column = 2)
Button(root, text = "保存文件地址", command = savePath).grid(row = 0, column = 3)
import os
def ListFilesToTxt(dir,file,wildcard,recursion):
exts = wildcard.split(" ")
files = os.listdir(dir)
for name in files:
fullname=os.path.join(dir,name)
if(os.path.isdir(fullname) & recursion):
ListFilesToTxt(fullname,file,wildcard,recursion)
else:
for ext in exts:
if(name.endswith(ext)):
(filename,extension) = os.path.splitext(name)
file.write(filename+"\n")
break
def Test():
dir = path
wildcard = ".jpg .pdf .txt"
file = open('save',"w")
if not file:
print ("cannot open the file %s for writing" % outfile)
ListFilesToTxt(dir,file,wildcard, 1)
file.close()
Test()
root.mainloop()
建议:
1. 不要将变量名命名为str;
2.以‘w’打开文件时,如果文件不存在,会自动创建一个文件,所以没必要加判断语句,下面这两行可以删除了:
if not file:
print ("cannot open the file %s for writing" % outfile)
3.你的文件名叫“save”,这个是文件要写成‘save.txt’;
我这边运行你的报错是在
files = os.listdir(dir1)
TypeError: listdir: path should be string, bytes, os.PathLike or None, not StringVar
也就是说是地址有问题,我把地址换成r'C:\Users\PC\Desktop\1',在下面放了一个pdf,一个txt,一个jpg还有一个文件夹,文件夹里面有一个文件2.txt,最终是成功将文件的名字(不加后缀名)保存到了save.txt,
我不太懂tkinter,你可以看一下那个地址要怎么改,下面的程序是没有问题的
import tkinter as tk
from tkinter import filedialog
'''打开选择文件夹对话框'''
root = tk.Tk()
root.withdraw()
Folderpath = filedialog.askdirectory() #获得选择好的文件夹
#print('Folderpath:',Folderpath)
import os
def ListFilesToTxt(dir,file,wildcard,recursion):
exts = wildcard.split(" ")
files = os.listdir(dir)
for name in files:
fullname=os.path.join(dir,name)
if(os.path.isdir(fullname) & recursion):
ListFilesToTxt(fullname,file,wildcard,recursion)
else:
for ext in exts:
if(name.endswith(ext)):
(filename,extension) = os.path.splitext(name)
file.write(filename+"\n")
break
def Test():
dir=Folderpath
outfile="name.txt"
wildcard = ".jpg .pdf"
file = open(outfile,"w")
if not file:
print ("cannot open the file %s for writing" % outfile)
ListFilesToTxt(dir,file,wildcard, 1)
file.close()
Test()