【问题标题】:Move files one by one to newly created directories for each file with Python 3使用 Python 3 将文件一一移动到每个文件的新创建目录
【发布时间】:2021-06-05 11:32:32
【问题描述】:

我拥有的是一个初始目录,其中 D:\BBS\file.x 中有一个文件,工作目录 D:\中有多个 .txt 文件

我要做的是复制文件夹 BBS 及其内容并按数字递增其名称,然后将每个现有的 .txt 文件复制/移动到新创建的目录以使其成为 \BBS1、\BBS2、.. ., BBSn(取决于 txt 的数量)。

之前和之后的视觉示例:

\WorkFolder 的初始视图

\WorkFolder 的所需视图

现在我只创建了一个新目录并将 txt 移动到其中,但一次完成,而不是我想要的。这是我的代码:

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 提前致谢

【问题讨论】:

  • 我不明白实际的问题是什么。你能详细说明一下吗?那么问题是你想将文件夹复制与txt文件复制分开吗?我误解了这个问题吗?您能否在文件树的前后添加一个示例,解释在之后的情况下什么不起作用?
  • @schilli 感谢您的澄清。我已经在帖子本身中提供了图像。如果不清楚,请随时询问。

标签: python windows directory txt


【解决方案1】:

现在,我明白你想要完成什么。我认为您只需遍历文本文件并为每个文件复制 BBS 文件夹就可以很容易地做到这一点。之后,您移动当前所在的文件。为了获得folder_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)

【讨论】:

  • 这确实运行良好。从现在开始,我看到并拥有如何处理逻辑的示例。我在想这个有点复杂。顺便说一句,非常感谢你向我展示了让它变得简单的方法。最诚挚的问候
  • 不客气。通常是简单的任务,比如复制文件,当你最终得到一个相当复杂的解决方案或者觉得它比任务更复杂时,从代码中退后一步,重新考虑是否可以用另一种方式完成,因为在 python 中通常有相当不错的简单的解决方案,python的标准库是一个强大的工具。
猜你喜欢
  • 1970-01-01
  • 2019-11-20
  • 2017-06-09
  • 2019-10-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-07-07
  • 1970-01-01
相关资源
最近更新 更多