我已经在这个挑战中工作了大约一天左右。我已经查看了SO上的多个问题和答案,并尝试了MacGyver'代码用于我的目的,但仍有问题。
我有一个目录(让我们称之为" src \"),包含数百个文件(.txt和.xml)。每个.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将每对文件移动到其各自的文件夹中。我已经尝试过使用我发现的代码(感谢11月12日Sethdd发布的帖子,但我很难弄清楚如何使用移动功能来获取文件对。 #39;我在哪里:
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
答案 0 :(得分:0)
使用glob模块来整合所有' txt'文件。从那里你可以解析并创建文件夹并复制文件。
答案 1 :(得分:0)
这个过程应该像一样简单给你作为一个人。
for file_name in os.listdir(srcpath):
dir = file_name[:9]
# if dir doesn't exist, create it
# move file_name to dir
你做了很多让你感到困惑的中间工作。
另外,插入一些简单的 print 语句来跟踪数据流和执行流程。到目前为止,您似乎有否跟踪输出。
答案 2 :(得分:0)
你可以用os模块做到。对于目录中的每个文件,检查是否存在关联文件夹,如果需要,请创建,然后移动该文件。请参阅以下代码:
import os
SRC = 'path-to-src'
for fname in os.listdir(SRC):
filename, file_extension = os.path.splitext(fname)
if file_extension not in ['xml', 'txt']:
continue
folder_path = os.path.join(SRC, filename)
if not os.path.exists(folder_path):
os.mkdir(folderpath)
os.rename(
os.path.join(SRC, fname),
os.path.join(folder_path, fname)
)
答案 3 :(得分:0)
我的方法是:
#! /usr/bin/env python
# -*- coding: utf-8 -*-
import os, shutil
import re
def getPairs(files):
pairs = []
file_re = re.compile(r'^(.*)\.(.*)$')
for f in files:
match = file_re.match(f)
if match:
(name, ext) = match.groups()
if ext == 'txt' and name + '.xml' in files:
pairs.append(name)
return pairs
def movePairsToDir(pairs):
for name in pairs:
os.mkdir(name)
shutil.move(name+'.txt', name)
shutil.move(name+'.xml', name)
files = os.listdir()
pairs = getPairs(files)
movePairsToDir(pairs)
注意:当在具有对的目录内调用时,此脚本可以正常工作。