Как добавить фиксированное число к целой части имени файла? - PullRequest
0 голосов
/ 18 июня 2020

Используя Python, мне нужно добавить 100 к целой части некоторых имен файлов, чтобы переименовать файлы. Файлы выглядят так: 0000000_6dee7e249cf3.log, где 6dee7e249cf3 - случайное число. В конце у меня должно быть:

0000000_6dee7e249cf3.log should change to 0000100_6dee7e249cf3.log
0000001_12b2bb88d493.log should change to 0000101_12b2bb88d493.log
etc, etc…

Я могу распечатать начальные файлы, используя:

initial: glob('{0:07d}_*[a-z]*'.format(NUM))

, но конечные файлы возвращают пустой список:

final: glob('{0:07d}_*[a-z]*'.format(NUM+100))

Более того, я не могу не переименовать initial в final с помощью os.rename, потому что он не может прочитать список, созданный с помощью функции глобуса.

Ответы [ 2 ]

0 голосов
/ 19 июня 2020

Я включил ваш поиск по регулярному выражению. Похоже, что glob не обрабатывает регулярное выражение, но re делает

import os
import re
#for all files in current directory
for f in os.listdir('./'):
    #if the first 7 chars are numbers
    if re.search('[0-9]{7}',f):
        lead_int = int(f.split('_')[0])
        #if the leading integer is less than 100
        if lead_int < 100:
            # rename this file with leading integer + 100
            os.rename(f,'%07d_%s'%(lead_int + 100,f.split('_')[-1]))
0 голосов
/ 18 июня 2020

Разделите значение имени файла с помощью разделителя '_' и используйте эти два значения для восстановления имени файла.

s = name.split('_')
n2 = str(int(s[0]) + 100)
new_name = s[0][:len(s[0]) - len(n2)] + n2 + '_' + s[1]
...