Ошибка типа: ожидаемый объект str, bytes или os.PathLike, не кортеж с os.path.basename - PullRequest
1 голос
/ 03 мая 2020

У меня возникла эта ошибка при одновременном открытии файлов мультипликаторов с помощью tkinter на Python3.

Мой код при открытии файла (ов):

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

Мой код при использовании theese файл (ы):

  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 вместо askopefilenames, но я могу выберите только 1 файл.

1 Ответ

0 голосов
/ 03 мая 2020

Ошибка из-за следующего:

  • askopenfilenames возвращает кортеж имен файлов, даже если есть только один
  • , который вы передаете результат от askopenfilenames до os.path.basename, но эта функция ожидает одно имя файла

Вот почему вы получаете ошибку expected str, bytes, or os.PathLike object, not tuple: вы передаете кортеж, а в сообщении об ошибке говорится, что вы можете ' сделать это.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...