以下是我的程序:
import numpy as np
import scipy as sp
import itertools
import os
import csv
import shutil
src = 'src';
dst = 'dst';
data = []
n = 1
while n < 233:
charn = str(n)
for j in range(1,9): # This will represent each plug subdirectory
for i in range(1,30):
if i < 10:
chari = str(i).zfill(2)
charj = str(j).zfill(2)
shutil.copytree(src+'HS_BIN_I'+chari+'_J'+charj+'/',dst+charn+'/'+'HS_BIN_I'+chari+'_J'+charj+'/')
chari = str(i)
charj = str(j).zfill(2)
shutil.copytree(src+'HS_BIN_I'+chari+'_J'+charj+'/',dst+charn+'/'+'HS_BIN_I'+chari+'_J'+charj+'/')
print chari
print charj
print charn
n = n + 1
所以我将文件夹从一个目录复制到另一个目录(232个不同的文件夹),但是有些文件夹有前导零。例如,它可能看起来像这样:
许斌(音译)I01(音译)J01(音译)
其他人看起来是这样的:
HS_BIN_I12_J08(J从不超过08,而我上升到29)。你知道吗
因此,在编写脚本时,我自然需要考虑这些前导零。不幸的是,在执行时出现以下错误:
Traceback (most recent call last):
File "cpfldr_232points.py", line 34, in <module>
shutil.copytree(src+'HS_BIN_I'+chari+'_J'+charj+'/',dst+charn+'/'+'HS_BIN_I'+chari+'_J'+charj+'/')
File "/usr/lib64/python2.6/shutil.py", line 136, in copytree
names = os.listdir(src)
OSError: [Errno 2] No such file or directory: '/src/HS_BIN_I1_J01/'
但是!当我进入目标目录时,文件夹已正确复制为:
许斌(音译)I01(音译)J01(音译)。你知道吗
所以它说这个文件夹不存在,但是不管怎样都正确地复制了它并且立即停止(没有其他文件夹被复制)。你知道吗
这是怎么回事?你知道吗
谢谢你的帮助!你知道吗
通过使用字符串格式来执行零填充和Python标准库中itertools模块中的
product
方法,可以使代码的意图更加清晰:我想你需要另外一个说法:
现在,无论数字是否小于10,您的代码都将执行上述两位代码。应该是:
然而,实际上你根本不需要第二部分。在你的
if i in range(1, 30):
之后,只要做:如果需要,zfill将负责添加前导零。你知道吗
你的循环次数已经超过233次了。您正在迭代
n
232次,j
8次,i
29次。232 * 8 * 29 = 53824. 所以其中一件事就是你产生的路径比你想象的要多得多。你知道吗第二,完全不清楚你到底在生成什么路径。代码太复杂了,很难猜出来。而不是:
考虑:
它更容易阅读,并且可以让您插入一个非常重要的打印语句,它将向您显示正在发生的结果。你知道吗
这将证明您正在生成的路径似乎缺少键
"/"
分隔符:更好的是,使用更高级的格式化操作生成path语句。您正在进行大量的手动转换,而字符串的
format
方法做得更干净。例如从本地上下文(大致上是您应该将此代码放入的函数)执行值(
src
、i
和j
)的字符串插值,并使用:02d
(“如果需要,带前导零的两位数整数”)等格式说明符进行插值。你知道吗最终代码:
我仍然不认为你想复制50K+目录…但也许你想。如果是这样的话,这是一种更干净、更防弹的方法。你知道吗
相关问题 更多 >
编程相关推荐