我不确定为什么我收到此错误,我在脚本中的不同位置使用str.join()
和os.path.join()
,原因是什么?
使用os.path.join:
from os.path import getsize, dirname, join
class Wav:
src_path = "No path"
dest_path = destination
old_name = "name.wav"
new_name = ""
def __init__(self, path):
self.src_path = path
self.old_name = os.path.split(path)
self.new_name = self.old_name
self.dest_path = join(destination, self.new_name) # error here
这是我的错误:
Traceback (most recent call last):
File "call.py", line 132, in <module>
temp = Wav(temp_path)
File "call.py", line 32, in __init__
self.dest_path = join(destination, self.new_name)
File "/usr/lib/python2.7/posixpath.py", line 75, in join
if b.startswith('/'):
AttributeError: 'tuple' object has no attribute 'startswith'
这与str.join()
发生冲突,还是我没有正确导入os.path
?
答案 0 :(得分:1)
self.dest_path = join(destination, self.new_name) # error here
self.new_name
不是字符串,它是一个元组,因此您无法将其用作join
的第二个参数。也许你想加入destination
加上self.new_name
的最后一个元素?
self.dest_path = join(destination, self.new_name[1])
答案 1 :(得分:1)
self.new_name
是一个元组,而不是代码中的字符串,os.path.join
采用字符串列表,而不是字符串和列表。你可以用
self.dest_path = join(destination, *self.new_name)
将self.new_name
展开为os.path.join
答案 2 :(得分:0)
元组(他们看起来如此:
mytup = ('hey','folk')
)没有属性startswith。你必须使用字符串。要检查这一点,只需在程序中打印变量即可。
我不认为join会互相替换,但你应该尝试一下。
import os.path
在您的第一个导入行下写下此内容。然后替换
加入(...,...)
与
os.path.join(...,...)
如果你想使用os.path模块。