XLSXシートのデータを使用して、複数のフォルダの名前を変更するスクリプトを作成しようとしています(名前とタイムスタンプ名前の一部として、"COMXYZ_YYYYMMDDHHMMSS"
形式)。Excelスプレッドシートから読み込み、XLSXのデータで複数のフォルダの名前を変更します
私のディレクトリにあるフォルダは、"COM123_YYYYMMDDHHMMSS"
または"COM12_YYYYMMDDHHMMSS"
または"COM1_YYYYMMDDHHMMSS"
の形式になります。
としてXLSXシートは、フィールドを持っています:
NUMBER
は(1から始まる)
FIELD3_FIELD4_FIELD2_MMDDYYYY_FIELD5_NUMBER_FIELD6_FIELD7
:私は名前"COM12_YYYYMMDDHHMMSS"
と私のディレクトリ内のフォルダのように名前を変更したい
FIELD1 | FIELD2 | FIELD3 | FIELD4 | FIELD5 | FIELD6 | FIELD7
COM12 A B C D E F
COM23 A B C D E F
アンダースコア"_"
の後の名前のタイムスタンプに応じて増加し、その日付はその特定の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
)
)
これまでに試したことがあるコードを投稿できますか?また、プログラミングに慣れていないと、これは難しいです。問題を小さなタスクに分割し、一度に1つずつ取り組むことができます。 – mareoraft
@mareoraft これまでのところ、私はディレクトリのフォルダをスキャンしています。ここから進める方法に取り組む必要があります。私はそれが難しい作業であることは承知していますが、ここで人々からアイデアや知識を得るのに役立つと信じています。 '輸入OS 輸入SYS 輸入ランダム デフget_immediate_subdirectories(フォルダ):os.listdirで リターン[名の名前(フォルダ) os.path.isdir場合(os.path.join(フォルダ、名前)) ] print get_immediate_subdirectories( "。") ' – BrightShad0w
ちょっと、問題はそれがすべてのフォルダを変更していないということですか? if ws ['%s'%i] .value> = "" folder_to_changeリストにあるすべてのフォルダが変更されるようにする必要があります。がんばろう! – Aquiles