Python:连接数太多了()?

时间:2015-06-12 18:10:35

标签: python join filepath

我不确定为什么我收到此错误,我在脚本中的不同位置使用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

3 个答案:

答案 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)

  1. 检查destination和self.new_name是否为列表或。元组
  2. 元组(他们看起来如此:

    mytup = ('hey','folk')
    

    )没有属性startswith。你必须使用字符串。要检查这一点,只需在程序中打印变量即可。

    1. 我不认为join会互相替换,但你应该尝试一下。

      import os.path

    2. 在您的第一个导入行下写下此内容。然后替换

      加入(...,...)

      os.path.join(...,...)

      如果你想使用os.path模块。