我试图编写一个脚本,使用XLSX工作表中的数据,根据其名称和时间戳("COMXYZ_YYYYMMDDHHMMSS"
格式也是名称的一部分),重命名特定目录中的多个文件夹。
我目录中的文件夹将采用"COM123_YYYYMMDDHHMMSS"
或"COM12_YYYYMMDDHHMMSS"
或格式"COM1_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"
重命名为:
FIELD3_FIELD4_FIELD2_MMDDYYYY_FIELD5_NUMBER_FIELD6_FIELD7
其中NUMBER
(从1开始)根据下划线后名称中的时间戳增加"_"
,而日期也根据该特定COM#的名称中的时间戳而增加。
我有多个具有相同COM#,但具有不同时间戳的文件夹。到目前为止,我能够为每个COM#重命名1个文件夹,但其余文件夹未重命名。
感谢所有帮助。
到目前为止,我在Aquiles的答案的帮助下编写的代码是:
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
)
)
我还没有测试过,某些索引和东西可能不是正确的,但是您会从中得到灵感。我相信这可以工作:
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])
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句