TypeError:应为str、bytes或os.PathLike对象,而不是具有os.path.basename的元组

2024-09-29 00:22:57 发布

您现在位置:Python中文网/ 问答频道 /正文

我在Python3上用tkinter一次打开多个文件时出现了这个错误

打开文件时的我的代码:

def OpenFile():

  Tk().withdraw()
  filename = askopenfilenames(title='Choose Combolist', filetypes=[("Text Files", "*.txt")])

  if filename:
      TxtTimeName(filename)
      pass

  else:
      NoFileSelected()

  return filename



def TxtTimeName(filename):

      CurrentTime = strftime(" %H-%M-%S")
      TxtName = os.path.basename(filename)
      TxtName = TxtName.replace(".txt", " ")
      FullName = TxtName + CurrentTime + ".txt"

      return FullName

使用SE文件时的我的代码:

  def MailToUser():

    filename = OpenFile()
    FullName = TxtTimeName(filename)

    ctypes.windll.kernel32.SetConsoleTitleW("TextTool | Made by VRX | Mode: Mail To User")
    sys.stdout.flush()

    try:
        os.mkdir('Mail to User')
    except Exception as E:
        pass


    f = open(str("./Mail to User/" + "Combined.txt"),"w+")

    StartTime()

    with open(filename, "r+", encoding="utf-8", errors="ignore") as file:
        for line in file:
            word = line.strip()
            firstDelPos = line.find("@")
            secondDelPos = line.find(":")
            stringAfterReplace = line.replace(line[firstDelPos + 0:secondDelPos], "")
            try:
                 f.write(stringAfterReplace)
            except Exception as E:
                 pass

     EndTime()

错误:

Traceback (most recent call last):
  File "C:\Users\VRX\OneDrive\Desktop\Desktop\Python Projects\combotool\combotool.py", line 494, in <module>
    Main()
  File "C:\Users\VRX\OneDrive\Desktop\Desktop\Python Projects\combotool\combotool.py", line 420, in Main
    TextSorter()
  File "C:\Users\VRX\OneDrive\Desktop\Desktop\Python Projects\combotool\combotool.py", line 82, in TextSorter
    filename = OpenFile()
  File "C:\Users\VRX\OneDrive\Desktop\Desktop\Python Projects\combotool\combotool.py", line 27, in OpenFile
    TxtTimeName(filename)
  File "C:\Users\VRX\OneDrive\Desktop\Desktop\Python Projects\combotool\combotool.py", line 38, in TxtTimeName
    TxtName = os.path.basename(filename)
  File "C:\Users\VRX\AppData\Local\Programs\Python\Python38\lib\ntpath.py", line 208, in basename
    return split(p)[1]
  File "C:\Users\VRX\AppData\Local\Programs\Python\Python38\lib\ntpath.py", line 177, in split
    p = os.fspath(p)
TypeError: expected str, bytes or os.PathLike object, not tuple

每当我选择一个文件时,它都会给我这个错误,当我使用askopenfilename而不是askopefilename时,它会工作,但我只能选择一个文件


Tags: 文件inpyoslineonedrivefilenameusers
1条回答
网友
1楼 · 发布于 2024-09-29 00:22:57

该错误是由于以下原因造成的:

  • askopenfilenames返回文件名的元组,即使只有一个
  • 您正在将askopenfilenames的结果传递给os.path.basename,但该函数需要一个文件名

这就是为什么会出现错误expected str, bytes, or os.PathLike object, not tuple:您正在传递一个元组,错误消息说您不能这样做

相关问题 更多 >