【问题标题】:Creating folders from a single column in a csv and using other column to rename files into folders从 csv 中的单个列创建文件夹并使用其他列将文件重命名为文件夹
【发布时间】:2018-03-16 15:32:06
【问题描述】:

我有一个如下所示的 csv 文件:

dc_identifier,aubrey_identifier
AR0776-280206-LT513-01,metadc1084267
AR0776-280206-LT513-02,metadc1083385
AR0776-280206-LT513-03,metadc1084185
AR0776-280206-LT513-04,metadc1083449
AR0776-280206-LT513-05,metadc1084294
AR0776-280206-LT513-06,metadc1083393
AR0776-280206-LT513-07,metadc1083604
AR0776-280206-LT513-08,metadc1083956
AR0776-280206-LT513-09,metadc1083223
AR0776-280206-LT513-10,metadc1084224

我需要在脚本所在的目录中创建名称为“metadc#######”的文件夹。

这是我目前所拥有的:

import os
import fileinput
path = 'C:\Users\gpp0020\Desktop\TestDir'

textFile = 'C:\Users\gpp0020\Desktop\TestDir\kxas_ids.csv'

myList = open(textFile, 'rb+')
for line in myList:
    for item in line.strip().split(','):
        os.makedirs(os.path.join(path, item))
        print 'created', item

但是!根据 csv,我还需要该程序抓取以标识符(AR0776-280206-LT513-01 等)命名的文件,并将它们放入相应的 metadc 编号中。每个文件都加倍(一个 .mkv 文件和一个 .mkv.md5 校验和文件),都需要进入文件夹。

最好的方法是什么?

【问题讨论】:

  • 您应该使用csv 模块,而不是使用line.strip().split() 解析CSV 文件。

标签: python python-3.x csv


【解决方案1】:

使用csv 库来帮助读取文件:

import csv
import os
import shutil

path = r'C:\Users\gpp0020\Desktop\TestDir'

with open('kxas_ids.csv', 'r', newline='') as f_input:
    csv_input = csv.reader(f_input)
    header = next(csv_input)

    for dv, aubrey in csv_input:
        os.makedirs(os.path.join(path, aubrey), exist_ok=True)
        mkv = '{}.mkv'.format(dv)
        shutil.copy2(os.path.join(path, mkv), os.path.join(path, aubrey, mkv))
        mkv_md5 = '{}.mkv.md5'.format(dv)
        shutil.copy2(os.path.join(path, mkv_md5), os.path.join(path, aubrey, mkv_md5))

例如:

  1. 创建一个名为C:\Users\gpp0020\Desktop\TestDir\metadc108426的文件夹

  2. 将名为AR0776-280206-LT513-01.mkv 的文件复制到其中。

  3. 将名为AR0776-280206-LT513-01.mkv.md5 的文件复制到其中。

  4. 假设所有文件都在path中找到

【讨论】:

  • 这创建了文件夹,但没有放入文件。它说Traceback (most recent call last): File "<stdin>", line 5, in <module> File "C:\ProgramData\Anaconda3\lib\os.py", line 220, in makedirs mkdir(name, mode) FileExistsError: [WinError 183] Cannot create a file when that file already exists: 'C:/Users/gpp0020/Desktop/TestDir\\metadc1084267'
  • 如果您在没有先删除所有子文件夹的情况下再次运行它会发生这种情况。
  • 您可以添加exist_ok=True使其忽略错误。
猜你喜欢
  • 2020-12-19
  • 2020-04-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-05-17
  • 2022-01-10
  • 2016-07-24
  • 2011-02-08
相关资源
最近更新 更多