【问题标题】:How do I append a list of multiple objects to the end of a file path?如何将多个对象的列表附加到文件路径的末尾?
【发布时间】:2016-07-19 10:08:08
【问题描述】:

我创建了一个 for 循环来创建一个包含字符串“size_i”的列表,所以我有 size_01、size_02、size_03 等一直到 size_84。喜欢:

def size():
    x = list()    
    for i in range(0,84):
        x = x.append('size' + str(i))
return x

这很好用。现在我想将该列表中的每个“大小”保存到文件路径的末尾:

d_path = /home/Jake/Documents/sizes/size_01
       = /home/Jake/Documents/sizes/size_02

等等……

但由于某种原因,我无法让它工作,而且我不知道我哪里出错了!这是我的全部尝试:

import os

def size():
    d_path = '/home/Jake/Documents/sizes'
    x = list()
    for i in range(0,84):
        x = x.append('size_' + str(i))
        p = os.path.join(d_path,x)
    return p

【问题讨论】:

  • x.appendNone 替换列表,因为append 不返回任何内容。此外,循环似乎完全错误 - 你不应该返回一个列表,并且每次只使用x 中的最后一项吗?
  • 而不是 x.append.. 试试这个:s='size_'+str(i), x.append(s), p=os.path.join(d_path,s)

标签: python list python-2.7 function


【解决方案1】:

根据我对这个问题的理解,你写错了你的函数。 x.append('size_' + str(i)) 返回None,所以基本上你在x = x.append('size_' + str(i)) 中用None 替换x,当你尝试加入时会出错。 您当前的函数正在返回您尝试创建的姓氏,即“/home/Jake/Documents/sizes/size_83”,我相信您想返回一个包含所有名称的列表。

这会起作用。

import os

def size():
    d_path = '/home/Jake/Documents/sizes'
    x = list()
    for i in range(0,84):
        tmp = 'size_' + str(i)
        p = os.path.join(d_path,tmp)
        x.append(p)
    return x

print size()

【讨论】:

    【解决方案2】:

    这对你有用吗?

    import os
    
    def size():
        d_path = '/home/Jake/Documents/sizes'
        x = []
        p = []
        for i in range(0,84):
            z = 'size_' + str(i)
    
            x.append(z)
            p.append(d_path+z)
        return p
    

    【讨论】:

      【解决方案3】:

      试试这个

      import os
      
      def size():
          d_path = '/home/Jake/Documents/sizes'
          x = list()
          for i in range(0,84):
              x.append(os.path.join(d_path,'size_' + str(i)))
          return x
      

      【讨论】:

        【解决方案4】:

        类列表中的函数追加不返回 重要的价值。

        【讨论】:

          【解决方案5】:

          试试这个:

          import os
          
          def size():
              d_path = '/home/Jake/Documents/sizes'
              x = []
              p=[]
              for i in range(0,84):
                  x.append('size_{:02}'.format(i))
                  p.append(os.path.join(d_path,x[i]))
              return p
          
          print size()
          

          【讨论】:

          • print在Python3中需要括号,即print(size())
          • 我知道,但标签上写着python-2.7
          【解决方案6】:

          其中一些答案不必要地冗长和复杂,但可能比以下 sn-ps 更能洞察正在发生的事情:

          清晰的方法

          path_root = "/home/Jake/Documents/sizes"
          
          sizes = ["size_%d" % i for i in range(84)]
          paths = [os.path.join(path_root, s) for s in sizes]
          
          print(paths)
          

          替代方法

          path_root = "/home/Jake/Documents/sizes"
          
          paths = [os.path.join(path_root, "size_%d" % i) for i in range(84)]
          
          print(paths)
          

          一些注意事项:

          • 这两种方法都使用列表推导
          • 范围下限为零时,可以省略
          • 这两种方法都使用 % 符号 printf 样式的字符串格式化运算符
          • 如果您想要像 cmets(但不是您的代码)建议的单个数字前导零,您可以将 "size_%d" 替换为 "size_%02d"

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2020-10-21
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多