【发布时间】:2015-10-23 22:03:17
【问题描述】:
嗨,经过 2 小时的谷歌搜索和搜索,我没有找到,也没有为以下设置构建一段简单的代码:
3 个文件夹,2 个文件:
/home/folderA/text2.txt
/home/folderB/
/home/folderB/folder1
/home/folderB/text1.txt
将文件夹B的“未知”内容移动到文件夹A。
解决此问题的所有尝试要么被认为过于琐碎,要么被重定向到“查找shutil”。或者为具有不同需求的特定设置生成半页代码,使我悲惨的pythonskills无法开发出足够(优雅)的结果。
在 python 中,我有一个过程来识别文件夹 B 的存在,但它的内容是未知的并且对我来说是不同的。鉴于充分披露;这是我的 XY 问题:
#!/usr/bin/python
from glob import glob
path1 =glob('*')
path2 = glob('*/*/')
print path1
print path2
print len(path2)
a = len(path2)
for i in range(0,a):
print len(path2[i]), path2[i], path2[i][len(path2[i])-2]
print(path2[i][len(path2[i])-2].isdigit())
if path2[i][len(path2[i])-3]==" " and path2[i][len(path2[i])-2].isdigit():
print('yay')
newpath =path2[i][:len(path2[i])-2]+"0"+path2[i][(len(path2[i])-2):]
print(newpath)
import os
print(os.path.isdir(newpath))
if os.path.isdir(newpath): #if it is true, the new folder with the " 0n" already exists
import shutil
newpath0=path2[i]+ '*/'
print(newpath0, "headsup", newpath)
shutil.copy(newpath0,newpath)
#shutil.move(
但是为了那些寻求有效、简单解决这个问题的人,请将其保留为“folderX”的简化和假设情况:)
-编辑-
因为文件夹 A 确实已经存在,并且与文件夹 B 具有相同(潜在的)层次结构。这就是为什么
shutil.rmtree('folderA')
不是一个选项; folderA 应该保持不变。
因此,具有讽刺意味的是,暂时删除文件夹 A 的内容以将文件夹 B 的内容放入其中,产生的问题与我试图解决的问题基本相同。
-edit2- 感谢您的努力,我不断得到:
SyntaxError: invalid syntax
在
def mv(from_folder, to_folder)
^
现在我为我的迟钝程度表示歉意,但我目前无法清楚地理解您如何设想您的解决方案;
所以在查找了 def mv(.. 函数后,我得出的结论是,您可能的意思是 from_folder 应该替换为包含 folderB 的字符串。
所以我尝试了 2 个选项:
- 您的原件
- 定义:
stringA='folderA', stringB=folderB
并在代码的前 3 行中将 from_folder 替换为 stringB 和 to_folder 替换为 stringA。
两者都产生相同的错误。
*注意 import os 和 import shutil 已经在活动 if 循环中执行。只是为了确保这不是导致问题的原因,我还使用给定的显式导入操作系统进行了尝试,并直接在定义上方导入了shutil ..
到目前为止,我的代码如下所示:
#!/usr/bin/python
from glob import glob
path1 =glob('*')
path2 = glob('*/*/')
#print path1
#print path2
#print len(path2)
a = len(path2)
for i in range(0,a):
#print len(path2[i]), path2[i], path2[i][len(path2[i])-2]
#print(path2[i][len(path2[i])-2].isdigit())
if path2[i][len(path2[i])-3]==" " and path2[i][len(path2[i])-2].isdigit():
#print('yay')
newpath =path2[i][:len(path2[i])-2]+"0"+path2[i][(len(path2[i])-2):]
#print(newpath)
import os
#print(os.path.isdir(newpath))
if os.path.isdir(newpath): #if it is true, the new folder with the " 0n" already exists
import shutil
newpath0=path2[i]+ '*/'
#print(newpath0, "hier", newpath, ' en path2[i] ', path2[i])
#shutil.copy(newpath0,newpath)
#from here chose from_folder = path2[i] and to_folder=newpath
stringb = path2[i]
stringa = newpath
print(stringb,' ', stringa)
print('reached')
def mv(stringb, stringa):
root_src_dir = stringb
print('reached')
root_dst_dir = stringa
for src_dir, dirs, files in os.walk(root_src_dir):
dst_dir = src_dir.replace(root_src_dir, root_dst_dir)
if not os.path.exists(dst_dir):
os.mkdir(dst_dir)
for file_ in files:
src_file = os.path.join(src_dir, file_)
dst_file = os.path.join(dst_dir, file_)
if os.path.exists(dst_file):
os.remove(dst_file)
shutil.move(src_file, dst_dir)
但它拒绝打印第二个“到达”,或者换句话说,它没有定义
【问题讨论】:
标签: python move subdirectory shutil