我注意到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
有人能指出我要去哪里的正确方向吗?
答案 0 :(得分:1)
theFile
是绝对文件路径。如果您只想使用基本名称,请使用:
destinFile = os.path.join(myFolder, myYear, os.path.basename(theFile))
请注意,os.path.join
返回的最后一个绝对参数及其后的任何相对参数都组合在路径中。这就是为什么结果不包含2019成分的原因。