Выбор имени файла с регулярным выражением в Pyton - PullRequest
0 голосов
/ 11 июля 2019

Я использую код для создания папок и перемещения в них .jpgs, и мне нужна небольшая помощь с включением регулярных выражений в одну из строк.Код следующий:

import glob
import os.path
import shutil

BASE_DIR = os.path.dirname(os.path.abspath(__file__))

files = glob.glob('*.jpg')
for filename in files:
    name = filename[0:7]
    try:
        os.makedirs(os.path.join(BASE_DIR, name))
    except OSError:
        pass
    shutil.move(filename, os.path.join(BASE_DIR, name, filename))

Как таковой, он в основном берет каждый .jpg из каталога и создает для него новую папку на основе первых 6 букв имени файла name = filename[0:7].Вместо этого я хочу назвать папки с помощью регулярного выражения, которое фиксирует все буквы перед подчеркиванием.Поэтому, если у меня есть изображение с именем examplename_53853532_5353.jpg, я хочу, чтобы скрипт создал папку с именем examplename и поместил в нее изображение.

Я попробовал следующее name = filename[r".+?(?=_)"], но оно не работает.Есть идеи, где я иду не так?

Ответы [ 3 ]

1 голос
/ 11 июля 2019

Если вы собираетесь использовать регулярное выражение, вам нужно будет использовать модуль re или какой-то другой модуль для фактической обработки регулярного выражения. r"strings", который вы пытаетесь использовать, это не regex строки, это raw строки (это означает, что некоторые escape-символы не обрабатываются).

Как указывает @Rakesh, str.split() - это более простое решение для этого конкретного случая, и оно не требует добавления модуля re, когда это не нужно. Но для ясности, вот выражение регулярного выражения, которое будет все до первого подчеркивания:

import re
...
for filename in files:
    name = re.search(r'([^_]*)_', filename).group(1)
1 голос
/ 11 июля 2019

Использование str.split()

Пример:

import glob
import os.path
import shutil

BASE_DIR = os.path.dirname(os.path.abspath(__file__))

files = glob.glob('*.jpg')
for filename in files:
    name = filename.split("_")[0]
    try:
        os.makedirs(os.path.join(BASE_DIR, name))
    except OSError:
        pass
    shutil.move(filename, os.path.join(BASE_DIR, name, filename))

Если вам нужно Regex.

import re

s = "examplename_53853532_5353.jpg"
pattern = re.compile(r"([a-zA-Z]+)(?=_)")

print(pattern.match(s).group(1))  # --> examplename
0 голосов
/ 11 июля 2019

Это должно сделать это:

[^\/\\]+$

Найти все в конце строки, которое не является ни косой, ни обратной косой чертой

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