使用Python 3将每个文件逐个移动到新创建的目录中
我拥有的是一个初始目录,其中一个文件位于D:\BBS\file.x中,多个.txt文件位于工作目录D中:\ 我试图做的是复制文件夹BBS及其内容并按编号递增其名称,然后将每个现有的.txt文件复制/移动到新创建的目录中,使其成为\BBS1、\BBS2、…、BBSn(取决于txt的编号) 之前和之后的可视示例: \WorkFolder的初始视图 所需的\WorkFolder视图 现在,我只创建了一个新目录并在其中移动txt,但这一切都是一次性的,而不是我想要的。这是我的密码:使用Python 3将每个文件逐个移动到新创建的目录中,python,windows,directory,txt,Python,Windows,Directory,Txt,我拥有的是一个初始目录,其中一个文件位于D:\BBS\file.x中,多个.txt文件位于工作目录D中:\ 我试图做的是复制文件夹BBS及其内容并按编号递增其名称,然后将每个现有的.txt文件复制/移动到新创建的目录中,使其成为\BBS1、\BBS2、…、BBSn(取决于txt的编号) 之前和之后的可视示例: \WorkFolder的初始视图 所需的\WorkFolder视图 现在,我只创建了一个新目录并在其中移动txt,但这一切都是一次性的,而不是我想要的。这是我的密码: from pat
from pathlib import Path
from shutil import copy
import shutil
import os
wkDir = Path.cwd()
src = wkDir.joinpath('BBS')
count = 0
for content in src.iterdir():
addname = src.name.split('_')[0]
out_folder = wkDir.joinpath(f'!{addname}')
out_folder.mkdir(exist_ok=True)
out_path = out_folder.joinpath(content.name)
copy(content, out_path)
files = os.listdir(wkDir)
for f in files:
if f.endswith(".txt"):
shutil.move(f, out_folder)
如前所述,我恳请您协助将文件逐一递增并复制到新创建的目录中
一般来说,python技能不多。Python3操作系统Windows
提前谢谢现在,我明白你想要完成什么了。我认为你可以很容易地做到这一点,只需迭代文本文件,并为每一个你复制的BBS文件夹。然后移动当前所在的文件。为了获取
文件夹\u num
,如果文件名始终为TextXX.txt
,您可以只访问特定索引处的文件名字符(例如f[4:6]
)。如果前缀“Text”可能不同,则使用正则表达式(如以下示例中所示)更稳定
另外,函数shutil.copytree
复制一个目录及其子目录
import re
import shutil
from pathlib import Path
wkDir = Path.cwd()
src = wkDir.joinpath('BBS')
for f in os.listdir(wkDir):
if f.endswith(".txt"):
folder_num = re.findall(r"\d+", f)[0]
target = wkDir.joinpath(f"{src.name}{folder_num}")
# copy BBS
shutil.copytree(src, target)
# move .txt file
shutil.move(f, target)
我不明白实际的问题是什么。你能详细说明一下吗?所以问题是你想把文件夹复制和txt文件复制分开?我是不是误解了这个问题?您是否可以添加一个文件树的前后示例,解释在后一个案例中哪些功能不正常?@schilli感谢您的澄清。我已经在帖子中提供了这些图片。如果不清楚,请随时询问更多。这确实运行良好。从现在起,我看到并有了如何处理逻辑的例子。我在想这件事有点复杂。顺便说一句,非常感谢你向我展示了如何让事情变得简单。非常感谢你,非常欢迎。通常对于复制文件这样的简单任务,当您最终得到一个相当复杂的解决方案或感觉它比任务更复杂时,请从代码中退一步,重新考虑是否可以用另一种方式完成,因为在python中通常有非常好的简单解决方案,并且python的标准库是一个强大的工具。