2015-07-14 5 views
0

Я застрял в части моего скрипта, который должен выполнять следующее: a. Итерации через исходный каталог. b. Переместите каждый файл (имя = расширение GUID.file) в папку назначения, названную в качестве руководства этого файла.перемещение файлов с нетрадиционными расширениями файлов в Python

Теоретически эта проблема достаточно проста для решения на Python с помощью os.walk() и os.rename(). Сложность заключается в том, что расширение файла для некоторых из этих файлов является нетрадиционным, как показано на скриншоте:

enter image description here

В качестве обходного пути, я с помощью Commons.IO Java библиотеки. Тем не менее, мой скрипт ошибочен в последних трех строках, когда я пытаюсь создать экземпляр объектов File. Что я делаю не так?

Сценарий:

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) 
+2

Что это странная смесь Java и Python синтаксис? –

+0

@AndrewMedico OP использует [Jython] (http://www.jython.org/), который, как вы уже догадались, работает вместе с python и Java – smac89

ответ

1

Вы получаете ошибку синтаксического анализа из-за неправильного синтаксиса.

В Python вы не указываете типы переменных, или использовать new для конкретизации новых объектов

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

Должно быть

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

Из Jython docs:

Если у вас есть 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