在 Python 中移动具有非常规文件扩展名的文件

moving files with unconventional file extensions in Python

我被困在我的脚本中应该执行以下操作的部分: 一种。遍历源目录。 b.将每个文件(名称 = GUID.file 扩展名)移动到以该文件的 GUID 命名的目标文件夹。

理论上,这个问题很简单,可以在 Python 中用 os.walk() 和 os.rename() 解决。复杂的是,其中一些文件的文件扩展名是非常规的,如以下屏幕截图所示:

作为解决方法,我使用了 Commons.IO Java 库。然而,当我尝试实例化 File 对象时,我的脚本在最后 3 行出错。我做错了什么?

脚本:

import os
import codecs
import shutil
import datetime
import sys
from org.apache.commons.io import FileUtils
from org.apache.commons.io.filefilter import TrueFileFilter
from java.io import File

sourceDirectoryRoot = 'P:/Output/Export18/BAD'
sourceDirectory = sourceDirectoryRoot + '/NATIVES'

for source in FileUtils.iterateFiles(File(sourceDirectory),TrueFileFilter.INSTANCE,TrueFileFilter.INSTANCE):
  path = source.getPath().replace('\', '/')
  file = source.getName()
  fileparts = path.split(".")
  ext = fileparts[len(fileparts) - 1]
  destDirectory = sourceDirectoryRoot + '/{' + file[0:36] + '}/'  + '[Document Renamed].' + ext
  print path
  print destDirectory
  File s = new File(path)
  File d = new File(destDirectory)
  FileUtils.moveFile(s, d)

错误(部分字符串):

Script failed due to an error:
  File "<script>", line 21
    File s = new File(path)
        ^
SyntaxError: no viable alternative at input 's'

    at org.python.core.ParserFacade.fixParseError(ParserFacade.java:92)

由于语法无效,您收到解析器错误。

在Python中你没有指定变量类型,或者使用new实例化新对象

File s = new File(path)
File d = new File(destDirectory)

应该是

s = File(path)
d = File(destDirectory)

来自Jython docs

如果你有 Java class

public class Beach {

    private String name;
    private String city;


    public Beach(String name, String city){
        this.name = name;
        this.city = city;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getCity() {
        return city;
    }

    public void setCity(String city) {
        this.city = city;
    }

}

您可以像这样从 Jython 中使用它:

>>> import Beach
>>> beach = Beach("Cocoa Beach","Cocoa Beach")
>>> beach.getName()
u'Cocoa Beach'
>>> print beach.getName()
Cocoa Beach