【问题标题】:Using loops to create copies and rename files使用循环创建副本和重命名文件
【发布时间】:2014-01-29 00:57:42
【问题描述】:

python 菜鸟在这里难住了。我正在尝试将文件从源目录复制到输出目录,重命名文件并为组中的每个成员再次循环所有这些。

到目前为止,我的输出只为我提供了 john 分组的第一组文件。

有人可以指出我做错了什么吗?请帮忙..

import os
import shutil
from glob import glob
import easygui as eg

groups = {'mark': ('john', 'lisa', 'craig', 'jessie'),}

title = 'Title'
msg = 'Choose Input Directory'
default = 'C\\:'
inputdir = eg.diropenbox(msg, title, default)

files = glob(inputdir + '/*.*')

x = input('How many copies?   ')
y = raw_input('Text for filename?   ')

otitle = 'Title'
omsg = 'Choose Output Directory'
odefault = 'C\\:'
outputdir = eg.diropenbox(omsg, otitle, odefault)

x = x - 1
z = 0

for members in groups['mark']:
    while x >= 0:
        for filename in files:
            shutil.copy(filename, outputdir)
        ofiles = glob(outputdir + '/*.*')
        for ofilename in ofiles:
            if '-' and 'Template' in ofilename:
                os.rename(ofilename, ofilename.replace('-', str(x)).replace('Template', y))
        x -= 1

    files = glob(outputdir + '/*.*')
    for filename in files:
        if 'person' in filename:
            os.rename(filename, filename.replace('person', groups['mark'][z]))
    z += 1    

【问题讨论】:

  • 为什么你使用groups['mark'][z] 而不仅仅是members
  • 其实我发帖后才发现哈哈,我就是个菜鸟,放轻松... :)

标签: python loops


【解决方案1】:

第一次迭代后,x 已经是0,所以不要进入while 循环。

我认为您想存储副本数并在每次迭代后将 x 重置为它。

类似:

copies = input('How many copies?   ')

 ...    
x = copies - 1

for members in groups['mark']:
    x = copies - 1        
    while x >= 0:
       ...

【讨论】:

  • 我认为你错了,你的while迭代一直持续到x >= 0,这意味着它只有在x < 0时才会停止并转到下一个成员。试试这个。
  • 我收到了第 30 行的错误 (shutil.copy(filename, outputdir))... 它说“错误:'路径/文件名'和'路径/文件名'是同一个文件”。 ..我可能刚刚弄清楚为什么会出现错误:)
猜你喜欢
  • 1970-01-01
  • 2019-03-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-01-12
  • 1970-01-01
  • 2012-03-11
  • 1970-01-01
相关资源
最近更新 更多