Скрипт для удаления строки до первого числа - PullRequest
0 голосов
/ 22 ноября 2018

Мне нужно написать скрипт, который просматривает папку и удаляет текст из строки изображения.

image-w-inch-bob-bob-bob-bob-8820-AV1.jpg
image-w-inch-bob-bob-bob-bob-8820-AV2.jpg
image-w-inch-bob-bob-bob-bob-8820-AV3.jpg
image-w-inch-bob-bob-bob-bob-8820-AV4.jpg
image-w-inch-bob-bob-bob-bob-8820-AV5.jpg
image-w-inch-bob-bob-bob-bob-8820-AV6.jpg

Мне нужно переименовать его в

8820-AV1.jpg
8820-AV2.jpg
8820-AV3.jpg
8820-AV4.jpg
8820-AV5.jpg
8820-AV6.jpg

Кто-нибудь знает такой сценарий?

Ответы [ 5 ]

0 голосов
/ 22 ноября 2018

Вот решение Perl one liner:

$ ls -l
total 0
-rwxrw-r--+ 1 xxxx xxxx 0 Nov 22 08:23 image-w-inch-bob-bob-bob-bob-8820-AV1.jpg
-rwxrw-r--+ 1 xxxx xxxx 0 Nov 22 08:23 image-w-inch-bob-bob-bob-bob-8820-AV2.jpg
-rwxrw-r--+ 1 xxxx xxxx 0 Nov 22 08:23 image-w-inch-bob-bob-bob-bob-8820-AV3.jpg
-rwxrw-r--+ 1 xxxx xxxx 0 Nov 22 08:23 image-w-inch-bob-bob-bob-bob-8820-AV4.jpg
-rwxrw-r--+ 1 xxxx xxxx 0 Nov 22 08:23 image-w-inch-bob-bob-bob-bob-8820-AV5.jpg
-rwxrw-r--+ 1 xxxx xxxx 0 Nov 22 08:23 image-w-inch-bob-bob-bob-bob-8820-AV6.jpg

$ perl -ne ' BEGIN { foreach $f (glob("image-w*.jpg")) { $newf=$f, $newf=~s/(.[^\d]*)-(\d+)(.*)/\2\3/g; rename $f, "$newf" } exit } '

$ ls -l
total 0
-rwxrw-r--+ 1 xxxx xxxx 0 Nov 22 08:23 8820-AV1.jpg
-rwxrw-r--+ 1 xxxx xxxx 0 Nov 22 08:23 8820-AV2.jpg
-rwxrw-r--+ 1 xxxx xxxx 0 Nov 22 08:23 8820-AV3.jpg
-rwxrw-r--+ 1 xxxx xxxx 0 Nov 22 08:23 8820-AV4.jpg
-rwxrw-r--+ 1 xxxx xxxx 0 Nov 22 08:23 8820-AV5.jpg
-rwxrw-r--+ 1 xxxx xxxx 0 Nov 22 08:23 8820-AV6.jpg

$
0 голосов
/ 22 ноября 2018

Самый простой способ сделать это - найти скрипт python внутри папки, в которой находятся файлы.Предполагая, что все имена файлов имеют одинаковое количество символов перед первым числом, вам понадобится что-то вроде:

import os
for file in os.listdir('.'):
    if '.py' not in file: #not the python script
        os.rename(file, file[indexOfFirstNum:])

Я не тестировал скрипт, поэтому сначала попробуйте его и измените соответствующим образом перед его запускомв реальной папке.

РЕДАКТИРОВАТЬ: обратитесь к ответу shlomif , если вы хотите, чтобы скрипт был более общим.Регулярные выражения полезны для поиска и сопоставления шаблонов в строках.

0 голосов
/ 22 ноября 2018

Если вы просто пытаетесь вырезать весь текст до того, как в имени файла будет найдена первая цифра, то что-то вроде этих строк с относительно простым регулярным выражением должно работать в python:

import os
import re
# replace with the path to your file:
path = 'test/'
for filename in os.listdir(path):
    os.rename(os.path.join(path, filename),
              os.path.join(path, re.search('\d.*',filename).group()))

Мы можем создатьтестовый файл просто для удовольствия, чтобы увидеть, что он работает:

import os
import re

# list out all the filenames to put into our test directory
l=['image-w-inch-bob-bob-bob-bob-8820-AV1.jpg',
   'image-w-inch-bob-bob-bob-bob-8820-AV2.jpg',
   'image-w-inch-bob-bob-bob-bob-8820-AV3.jpg',
   'image-w-inch-bob-bob-bob-bob-8820-AV4.jpg',
   'image-w-inch-bob-bob-bob-bob-8820-AV5.jpg',
   'image-w-inch-bob-bob-bob-bob-8820-AV6.jpg']

# Create Directory
os.mkdir('test')

# add in all the files
for f in l:
    open(f'test/{f}','a').close()

# All the files are there
>>> os.listdir('test')
['image-w-inch-bob-bob-bob-bob-8820-AV5.jpg', 'image-w-inch-bob-bob-bob-bob-8820-AV4.jpg', 'image-w-inch-bob-bob-bob-bob-8820-AV6.jpg', 'image-w-inch-bob-bob-bob-bob-8820-AV3.jpg', 'image-w-inch-bob-bob-bob-bob-8820-AV2.jpg', 'image-w-inch-bob-bob-bob-bob-8820-AV1.jpg']

# rename with the loop provided above:

path = 'test/'
for filename in os.listdir(path):
    os.rename(os.path.join(path, filename),
              os.path.join(path, re.search('\d.*',filename).group()))

# all the filenames have changed
>>> os.listdir('test')
['8820-AV1.jpg', '8820-AV3.jpg', '8820-AV2.jpg', '8820-AV6.jpg', '8820-AV5.jpg', '8820-AV4.jpg']
0 голосов
/ 22 ноября 2018

Самый естественный способ - использовать регулярные выражения.

Вот пример реализации Python:

import re
s = 'image-w-inch-bob-bob-bob-bob-8820-AV1.jpg'
capture_from_first_digit_re = re.compile('\D*(\d.*)')
print(capture_from_first_digit_re .findall(s)[0])

Вы можете использовать это, как считаете нужным в вашем контексте.


Краткое объяснение:

  • \ D - что угодно кроме цифры
  • \ D * - продолжайте, пока не нажмете цифру
  • \ d -любая цифра
  • . * - все что угодно
  • (###) - захватить совпадение ###

Собрать все вместе: захватить все после первая цифра, которую вы найдете.

0 голосов
/ 22 ноября 2018

Скорее всего, вы можете сделать это с помощью rename , если ваш дистрибутив предоставляет эту команду.Например:

$ rename 'image-w-inch-bob-bob-bob-bob-' '' image-w-"

или с регулярным выражением PCRE Regex:

$ rename 's/image-w-inch-bob-bob-bob-bob-//' image-w-*

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...