根据文件名将文件从一个文件夹复制到多个其他文件夹(全部在一个主文件夹内)

问题描述 投票:0回答:1

我对 python 比较陌生,虽然我可以理解代码(大部分),但我在开始编写代码时遇到了困难,所以感谢任何帮助。这也是我第一次在 stackoverflow 上发帖,所以请放轻松,因为 O 仍然不知道所有发帖规则。

我正在开展一个涉及复制许多 csv 的项目。一个文件夹中的文件(我们将其称为多个其他文件夹的“数据”,所有这些文件夹都位于一个主文件夹中(例如,“主文件夹”>“site_1”、“site_2”、“site_3”等)。文件名由一系列数字(例如序列号)组成,它们需要复制到的文件夹是根据收集数据的站点命名的。还有一个单独的文件将数据文件连接到位置,并包括序列号和站点名称。每个站点还需要复制多个文件。

我一直在对此进行一些深入研究,看来

shutil.copy()
的某些变体将是最好的选择。我只是不知道从哪里开始以及如何利用包含站点名称和文件序列号的文件将这些文件复制到正确的文件夹中。有些文件被手动复制到各自的文件夹中,所以我希望代码能够跳过这些文件,只在新文件添加到“数据”文件夹时添加新文件。

在“数据文件夹”中,我目前有这样的文件:

  • 123.csv
  • 456.csv
  • 789.csv
  • 111.csv
  • 222.csv
  • 333.csv
  • 444.csv
  • 555.csv

我希望将这些文件复制到各自的站点文件夹中:

  • site_1 -> 123.csv、456.csv、789.csv
  • site_2 -> 111.csv、222.csv、333.csv
  • site_3 -> 444.csv、555.csv

这将基于具有以下结构的连接文件:

| siteName | serialNumber |
| -------- | ------------ |
| site_1   | 123          |
| site_1   | 456          |
| site_1   | 789          |
| site_2   | 111          |
| site_2   | 222          |
| site_2   | 333          |
| site_3   | 444          |
| site_3   | 555          |

如有任何帮助,我们将不胜感激!预先感谢您!

python copy
1个回答
0
投票

我假设您现在可以将连接文件更改为 csv 文件...

mapper = {}
with open('connecting_file.csv', 'r') as f:
    for i, line in enumerate(f):
        if i == 0:
            # Skip the column headers.
            continue

        site_name, serial_number = line.split(',')
        mapper[serial_number] = site_name


folder_contents = os.listdir('Data')
for filename in folder_contents:
    # I'm assuming the files are actually named with 3 digits,
    # if not, a change will be needed below.
    prefix = filename[0:3]
    destination_folder = mapper[prefix]
    destination_filename = f'Main folder/{destination_folder}/{filename}'
    shutil.copyfile(filename, destination_filename)

© www.soinside.com 2019 - 2024. All rights reserved.