打开一个目录,保存目录下的文件名到 txt,错误百出,求指点?

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()