从Excel电子表格中读取,并使用XLSX中的数据重命名多个文件夹

2024-04-28 22:29:44 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在尝试编写一个脚本,使用XLSX表中的数据,根据它们的名称和时间戳(它们也是名称的一部分,以"COMXYZ_YYYYMMDDHHMMSS"格式)重命名特定目录中的多个文件夹。在

我的目录中的文件夹格式为"COM123_YYYYMMDDHHMMSS""COM12_YYYYMMDDHHMMSS"或{}。在

XLSX工作表的字段如下:

FIELD1 | FIELD2 | FIELD3 | FIELD4 | FIELD5 | FIELD6 | FIELD7
COM12      A        B        C        D        E        F
COM23      A        B        C        D        E        F

我希望将目录中名为"COM12_YYYYMMDDHHMMSS"的文件夹重命名为:

^{pr2}$

其中NUMBER(从1开始)根据名称中下划线"_"后面的时间戳而增加,而日期则根据名称中的时间戳以及该特定COM的时间戳而增加。在

我有多个文件夹具有相同的COM,但时间戳不同。到目前为止,我可以为每个COM重命名1个文件夹,但其余的文件夹没有被重命名。在

感谢所有的帮助。在

阿奎尔的答案是我写的:

import os
import random
import string
import datetime
import re
import openpyxl
from collections import namedtuple
# Get Directories
directories = [name for name in os.listdir(r'.') if name.startswith('COM')]
# Load workbook
wb = openpyxl.load_workbook('database.xlsx')
ws = wb['Sheet1']
rows = 20
for i in xrange(2, rows + 2):
    if ws['A%s' % i].value >= "":
        folder_to_change = [x for x in directories if x.startswith((ws['A%s' % i].value) + '_')]
        folder_to_change = folder_to_change[0] if len(folder_to_change) > 0 else None
        date_used = {}
        if folder_to_change:
            directories.remove(folder_to_change)
            # print folder_to_change
            folder_parts = folder_to_change.split('_')
            comport = folder_parts[0]
            timestamp = folder_parts[1]
            # print timestamp
            ts = re.search('(....)(....)(......)', timestamp)
            date = ts.group(2) + ts.group(1)
            # print date
            time = comport
            # print time
            date_used[comport] = 1 if comport not in date_used else date_used[comport] + 1
            # print date_used
            # print folder_to_change
            os.rename(
              folder_to_change,
              '{0}_{1}_{2}_{3}_{4}_{5}_{6}_{7}_{8}'.format(
                ws['B%s' % i].value,
                ws['C%s' % i].value,
                ws['G%s' % i].value,
                date,
                ws['D%s' % i].value,
                date_used[comport],
                ws['F%s' % i].value,
                ws['H%s' % i].value,
                ws['I%s' % i].value
                )
              )

Tags: toimport文件夹名称dateifwsvalue
1条回答
网友
1楼 · 发布于 2024-04-28 22:29:44

我还没有测试过这个,有些索引和东西可能不是正确的,但是你可以从中得到想法。我相信这可以奏效:

import os
import openpyxl
import string

# Get directories
directories = [name for name in os.listdir('.')]

# Load Workbook
wb = openpyxl.load_workbook('file.xls')

# Load first work sheet
ws = wb[0]
rows = 10
dates_used = {}
for i in xrange(2, rows + 2):
    folder_to_change = [x for x in directories if x.startswith(ws['A%s' % i])]
    for y, folder in enumerate(folder_to_change):
        date = folder[8:16]
        os.rename(folder, '{0}_{1}_{2}_{3}_{4}_{5}_{6}_{7}'.format(
            ws['C%s' % i], ws['D%s' % i], ws['B%s' % i], date, ws['E%s' % i], 
            y+1, ws['F%s' % i], ws['G%s' % i])

相关问题 更多 >