python - 使用 python 将文件复制到文件列表中指定的目录

标签 python file copy directory

我在一个目录中有一堆文件,我想将它们组织在子目录中。

此目录结构(哪个文件将进入哪个目录)在文件列表中指定,如下所示:

目录:音乐\

-> 01-some_song1.mp3

-> 02-some_song2.mp3

-> 03-some_song3.mp3

目录:图像\

-> 01-some_image1.jpg

-> 02-some_image2.jpg

......................

我正在考虑提取数据(目录名和文件名)并将其存储在如下所示的字典中:

dictionary = {'Music': (01-some_song1.mp3, 02-some_song2.mp3,
                         03-some_song3.mp3),
              'Images': (01-some_image1.jpg, 02-some_image2.jpg),
          ......................................................
}

之后,我将复制/移动文件到各自的目录中。

我已经提取了目录名称并创建了空目录。

对于字典值,我尝试通过执行以下操作来获取列表的列表:

def get_values(file):
    values = []
    tmp = []
    pattern = re.compile(r'^-> (.+?)$')
    for line in file:
        if line.strip().startswith('->'):
            match = re.search(pattern, line.strip())
            if match:
                tmp.append(match.group(1))
        elif line.strip().startswith('Directory'):
            values.append(tmp)
            del tmp[:]
    return values

这似乎不起作用。 values 列表中的每个列表一遍又一遍地包含相同的 4 个文件名。

我做错了什么?

我还想知道完成这一切的其他方法是什么?我确信有更好/更简单/更干净的方法。

最佳答案

不需要使用正则表达式

d = {}
for line in open("file"):
    line=line.strip()
    if line.endswith("\\"):
        directory = line.split(":")[-1].strip().replace("\\","")
        d.setdefault(directory,[])
    if line.startswith("->"):
        song=line.split(" ")[-1]
        d[directory].append(song)
print d

输出

# python python.py
{'Images': ['01-some_image1.jpg', '02-some_image2.jpg'], 'Music': ['01-some_song1.mp3', '02-some_song2.mp3', '03-some_song3.mp3']}

关于python - 使用 python 将文件复制到文件列表中指定的目录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1281944/

相关文章:

python - 实现 Python `when` 构造的最佳方法是什么?

python - 在 Python Ubuntu 14.04 中导入 Wand

javascript - 尝试将 HTML 文件转换为包含套接字 io 的 JavaScript 时出现语法错误,SyntaxError : Unexpected token <

c - 使用函数将文本文件读入结构数组

python - Pandas 什么时候默认广播 Series 和 Dataframes?

string - 将具有相似名称的文件连接在一起

计算文本文件中出现的所有字符

java - 如何在不创建大量指向旧包的完全指定链接的情况下在 IntelliJ 中复制包

java - 在java中将一个数组复制到另一个数组中。数组存储异常

c++ - 使用 std::copy 插入 STL 队列