我正在嘗試編寫一個腳本,它使用XLSX工作表中的數據根據名稱和時間戳(這是一個也是名稱的一部分,格式爲"COMXYZ_YYYYMMDDHHMMSS"
)。從Excel電子表格中讀取數據,並使用XLSX中的數據重命名多個文件夾
我的目錄中的文件夾格式爲"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
)
)
你可以發佈你到目前爲止嘗試過的代碼嗎?另外,如果你不熟悉編程,這很難。您可以嘗試將問題分解爲更小的任務,並逐個解決它們。 – mareoraft
@mareoraft 到目前爲止,我正在掃描文件夾的目錄。需要研究如何從這裏開始。我知道這將是一項艱鉅的任務,但我相信這會幫助我從這裏獲得人們的想法和知識。 '進口OS 進口SYS 進口隨機 高清get_immediate_subdirectories(文件夾): 回報[名稱爲os.listdir(文件夾)名 如果os.path.isdir(os.path.join(文件夾名)) ] print get_immediate_subdirectories(「。」)' – BrightShad0w
嘿,所以現在的問題是它沒有改變所有的文件夾?這是因爲在if ws ['A%s'%i] .value> =「」之後,應該有一段時間或某事,以便folder_to_change列表中的所有文件夾都被更改。祝你好運! – Aquiles