Python 3.x python脚本在python解释器中执行,作为.py文件失败

Python 3.x python脚本在python解释器中执行,作为.py文件失败,python-3.x,macos-mojave,Python 3.x,Macos Mojave,我的剧本: from os import walk, path, rename def rename(source, dest): for root, sub, files in walk(source): for file in files: if file.endswith('.mp4'): nbase = file.split('.mp4')[0] newname = nbas

我的剧本:

from os import walk, path, rename

def rename(source, dest):
    for root, sub, files in walk(source):
        for file in files:
            if file.endswith('.mp4'):
                nbase = file.split('.mp4')[0]
                newname = nbase[0:len(nbase) - 12] + '.mp4'

                nsource = path.join(root, file)
                rdest = path.join(dest,newname)

                rename(nsource,rdest)

s = '/Users/ja/Desktop/t'
d = '/Users/ja/Desktop/u'

rename(s,d)
这个脚本,一行接一行,将在ipython中运行,重命名和重新定位文件而不会出现问题。
在SublimiteText或textedit中编写脚本并保存时,不会抛出错误,但不会执行任何操作。我在马科斯莫哈韦

问题在于,您为函数指定了名称
rename
,但在函数内部,您还试图使用名称
rename
调用
os.rename
。结果是永远不会调用
os.rename
。相反,您的函数使用新旧文件名作为参数对自身进行递归调用

该递归调用不会执行任何操作,因为当传递文件名时,
walk(source)
不会返回任何内容。最终的结果是一个程序可以正确地遍历旧目录树,但不会对它在该树中找到的文件执行任何操作

若要修复此问题,请为函数指定一个与操作系统不冲突的不同名称。重命名。可能类似于树中的重命名。或者,导入
os.rename
(从os导入
重命名为os_rename
)以外的名称,并从函数内部通过该新名称调用它


我不知道这在
ipython
中是如何工作的。REPL处理程序有时会对命名作用域执行奇怪的操作,但它会以某种方式调用
os。重命名
,而不是对函数进行递归调用,这似乎很奇怪。

您也尝试过一个“print”语句吗?是的,我尝试过。再次,完全空白。