【发布时间】:2017-09-07 21:39:19
【问题描述】:
我已经为这个挑战做了大约一天左右的时间。我查看了关于 SO 提出的多个问题和答案,并尝试“MacGyver”用于我的目的的代码,但仍然存在问题。
我有一个包含数百个文件(.txt 和 .xml)的目录(我们称之为“src\”)。每个 .txt 文件都有一个关联的 .xml 文件(我们称之为一对)。示例:
src\text-001.txt
src\text-001.xml
src\text-002.txt
src\text-002.xml
src\text-003.txt
src\text-003.xml
下面是一个示例,说明我希望如何将每对文件放入一个唯一的文件夹中:
src\text-001\text-001.txt
src\text-001\text-001.xml
src\text-002\text-002.txt
src\text-002\text-002.xml
src\text-003\text-003.txt
src\text-003\text-003.xml
我想做的是为每对文件创建一个关联的文件夹,然后使用 Python 将每对文件移动到其各自的文件夹中。我已经尝试使用我找到的代码工作(感谢 Sethdd 12 年 11 月的帖子,但我无法弄清楚如何使用移动功能来获取文件对。这是我所在的位置:
import os
import shutil
srcpath = "PATH_TO_SOURCE"
srcfiles = os.listdir(srcpath)
destpath = "PATH_TO_DEST"
# grabs the name of the file before extension and uses as the dest folder name
destdirs = list(set([filename[0:9] for filename in srcfiles]))
def create(dirname, destpath):
full_path = os.path.join(destpath, dirname)
os.mkdir(full_path)
return full_path
def move(filename, dirpath):
shutil.move(os.path.join(srcpath, filename)
,dirpath)
# create destination directories and store their names along with full paths
targets = [
(folder, create(folder, destpath)) for folder in destdirs
]
for dirname, full_path in targets:
for filename in srcfile:
if dirname == filename[0:9]:
move(filename, full_path)
我觉得这应该很简单,但 Python 不是我每天都在使用的东西,而且我已经有一段时间没有编写脚本了...任何帮助将不胜感激!
谢谢,
WK2EcoD
【问题讨论】:
-
欢迎来到 StackOverflow。请阅读并遵循帮助文档中的发布指南。 Minimal, complete, verifiable example 适用于此。在您发布 MCVE 代码并准确描述问题之前,我们无法有效地帮助您。我们应该能够将您发布的代码粘贴到文本文件中并重现您描述的问题。
标签: python file directory move shutil