os.join()的奇怪行为

时间:2019-10-20 15:03:00

标签: python string python-2.7 path

我注意到Python的os.join()行为异常。我在路径中添加了年份和文件名。这是我的代码。

#!/usr/bin/env python

import os

#------------------------------------------------
def file_walk(root, ext):
  # Walk file with me, Laura Palmer!

  fList = []
  for current, dirs, files in os.walk(root):
    for file in files:
      fname = os.path.join(current, file) # this works fine, yeah!

      src = os.path.isfile(fname)
      if src:
        if fname.endswith(ext):
          fList.append(fname)

  return fList


myFolder = r"d:\temp\test"
myExt = ".html"
myYear = "2019"

allfiles = file_walk(myFolder, myExt)

for theFile in allfiles:

  sourceFile = theFile
  destinFile = os.path.join(myFolder, myYear, theFile)

  print sourceFile
  print destinFile
  print 


myFile = "bookmarks_06_05_2019.html"
print os.path.join(myFolder, myYear, myFile)

# EoF

作为字符串,它们可以正常工作(请参阅最后一行),但是作为路径,效果不是很好:(

我从打印destinFile得到的输出

  

d:\ temp \ test \ bookmarks_01_26_2018.html

     

d:\ temp \ test \ bookmarks_05_06_2014.html

     

d:\ temp \ test \ bookmarks_06_05_2019.html

我希望得到以下消息:

  

d:\ temp \ test \ 2019 \ bookmarks_01_26_2018.html

     

d:\ temp \ test \ 2019 \ bookmarks_05_06_2014.html

     

d:\ temp \ test \ 2019 \ bookmarks_06_05_2019.html

有人能指出我要去哪里的正确方向吗?

1 个答案:

答案 0 :(得分:1)

theFile是绝对文件路径。如果您只想使用基本名称,请使用:

destinFile = os.path.join(myFolder, myYear, os.path.basename(theFile))

请注意,os.path.join返回的最后一个绝对参数及其后的任何相对参数都组合在路径中。这就是为什么结果不包含2019成分的原因。