4

我正在完成名片制作流程(excel > xml > indesign > 单页 pdfs),我想在文件名中插入员工的姓名。

我现在拥有的:

BusinessCard_01_Blue.pdf
BusinessCard_02_Blue.pdf
BusinessCard_03_Blue.pdf (they are gonna go up to the hundreds)

我需要什么(我可以用正则表达式轻松操作名单):

BusinessCard_01_CarlosJorgeSantos_Blue.pdf
BusinessCard_02_TaniaMartins_Blue.pdf
BusinessCard_03_MarciaLima_Blue.pdf

我是一个 Java 和 Python 的蹒跚学步的孩子。我已阅读相关问题,在 Automator (Mac) 和 Name Mangler 中尝试过,但无法正常工作。

在此先感谢,格斯

4

4 回答 4

2

如果您有一张地图可以在其中查看正确的名称,您可以在 Java 中执行以下操作:

List<Files> originalFiles = ... 
for( File f : originalFiles ) { 
     f.renameTo( new File( getNameFor( f ) ) );
}

并将其定义为getNameFor

public String getNameFor( File f ) { 
    Map<String,String> namesMap = ... 
    return namesMap.get( f.getName() );
}

在地图中,您将拥有以下关联:

BusinessCard_01_Blue.pdf => BusinessCard_01_CarlosJorgeSantos_Blue.pdf

是否有意义?

于 2011-02-16T22:18:06.203 回答
2

在 Python 中(经过测试):

#!/usr/bin/python
import sys, os, shutil, re

try: 
    pdfpath = sys.argv[1]
except IndexError: 
    pdfpath = os.curdir

employees = {1:'Bob', 2:'Joe', 3:'Sara'}    # emp_id:'name'
files = [f for f in os.listdir(pdfpath) if re.match("BusinessCard_[0-9]+_Blue.pdf", f)]
idnumbers = [int(re.search("[0-9]+", f).group(0)) for f in files]
filenamemap = zip(files, [employees[i] for i in idnumbers])
newfiles = [re.sub('Blue.pdf', e + '_Blue.pdf', f) for f, e in filenamemap]

for old, new in zip(files, newfiles):
    shutil.move(os.path.join(pdfpath, old), os.path.join(pdfpath, new))

编辑:这现在只更改那些尚未更改的文件。

employees如果您想要自动构建字典的东西,请告诉我。

于 2011-02-16T22:37:45.313 回答
0

如果您有一个与文件生成顺序相同的名称列表,那么在 Python 中它就像这个未经测试的片段:

#!/usr/bin/python
import os

f = open('list.txt', 'r')
for n, name in enumerate(f):
    original_name = 'BusinessCard_%02d_Blue.pdf' % (n + 1)
    new_name = 'BusinessCard_%02d_%s_Blue.pdf' % (
                             n, ''.join(name.title().split()))
    if os.path.isfile(original_name):
        print "Renaming %s to %s" % (original_name, new_name),
        os.rename(original_name, new_name)
        print "OK!"
    else:
        print "File %s not found." % original_name
于 2011-02-16T22:25:20.983 回答
0

Python:

假设您已经实现了命名逻辑:

for f in os.listdir(<directory>):
    try:
        os.rename(f, new_name(f.name))
    except OSError:
        # fail

当然,您需要编写一个new_name接收字符串"BusinessCard_01_Blue.pdf"并返回字符串的函数"BusinessCard_01_CarlosJorgeSantos_Blue.pdf"

于 2011-02-16T22:28:41.327 回答