类型错误:join() 参数必须是 str 或字节,而不是“列表”

cod*_*476 5 python python-3.7

我是 python 新手,刚刚学习 os.walk() 和 tarfile。我正在尝试遍历一个包含文件和子文件夹的文件夹,并尝试将它们全部添加到 tar 文件中。我不断收到错误“TypeError:join() 参数必须是 str 或字节,而不是 'list'”

在我尝试添加到 tar 文件之前,我曾尝试只打印内容。给出同样的错误。我可以通过将 str 添加到 os.path.dirname 的参数来解决这个问题,但不确定这是否正确。

import tarfile
import os

tnt = tarfile.open("sample.tar.gz", 'w:gz')

dt = os.walk('C:\\users\\cap\\desktop\\test1')
for root, d_names, f_names in dt:
   print(os.path.join((root), (f_names))) #error
   tnt.add(os.path.join(root, f_names) #error
tnt.close()

print(os.path.join((root), (f_names)))
genericpath._check_arg_types('join', path, *paths)
Run Code Online (Sandbox Code Playgroud)

输出:

TypeError: join() argument must be str or bytes, not 'list''''
Run Code Online (Sandbox Code Playgroud)

hee*_*ayl 5

f_names是一个列表,您需要对其进行迭代以分别获取每个文件名并在os.path.join例如:

for root, d_names, f_names in dt:
    for filename in f_names:
        os.path.join(root, filename)
Run Code Online (Sandbox Code Playgroud)