0

我被困在脚本的一部分应该执行以下操作:遍历源目录。湾。将每个文件(名称 = 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)
4

1 回答 1

1

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

在 Python 中,您不指定变量类型,或new用于实例化新对象

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

应该

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

来自Jython 文档

如果你有一个 Java 类

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
于 2015-07-14T01:30:59.877 回答