Удалить нежелательную подстроку из списка строк по указанным индексам - PullRequest
1 голос
/ 12 июня 2019

Впервые в Python, и я хочу удалить префикс двух строк.Просто оставив все перед J и удалив .json.

Я пытался использовать [: 1], но он удаляет всю первую строку

name = ['190523-105238-J105150.json',
'190152-105568-J616293.json']

Я хочу вывести это

name = ['J105150',
'J616293']

Ответы [ 6 ]

1 голос
/ 12 июня 2019

Вы можете использовать find() функцию и объединение массивов.

name = ['190523-105238-J105150.json' ,'190152-105568-J616293.json']
for i in range(len(name)):
    start_of_json = name[i].find('.json')
    start_of_name = name[i].find('J')
    name[i] = name[i][start_of_name:start_of_json]
1 голос
/ 12 июня 2019

Вы можете использовать split() в понимании списка:

name = ['190523-105238-J105150.json',
'190152-105568-J616293.json']

print([x.rsplit('-', 1)[1].split('.')[0] for x in name])
# ['J105150', 'J616293']
0 голосов
/ 12 июня 2019

Во-первых, это не фрейм данных, это массив.

Вы можете использовать для этого что-то простое, как показано в строке ниже, при условии, что у вас есть статическая структура.

name = [x[x.index("J"):x.index(".")] for x in name]
0 голосов
/ 12 июня 2019

Вот два возможных подхода:

Один более многословный. Другой, по сути, делает то же самое, но, если хотите, конденсирует его в одну строку.

Подход 1:

В подходе 1 мы создаем пустой список для временного хранения результатов.

Оттуда мы анализируем каждый элемент name и .split() каждый элемент на дефисах.

Для каждого элемента будет получен список, состоящий из трех элементов: ['190523', '105238', 'J105150.json'], например.

Мы используем индекс [-1], чтобы выбрать только последний элемент, а затем .replace() текст .json с пустой строкой '', эффективно удаляющий .json.

Затем мы добавляем элемент в список new_names.

Наконец, мы перезаписываем переменную label name, чтобы она указывала на новый сгенерированный список.

name = ['190523-105238-J105150.json', '190152-105568-J616293.json']

new_names = []
for item in name:
    item = item.split('-')[-1]
    new_names.append(item.replace('.json', ''))
name = new_names 

Подход 2:

name = ['190523-105238-J105150.json', '190152-105568-J616293.json']

name = [item.split('-')[-1].replace('.json', '') for item in name]
0 голосов
/ 12 июня 2019

Выполнение [: 1] будет разделять ваш текущий список, чтобы принимать только элементы, которые находятся до индекса 1, поэтому будет присутствовать только элемент с индексом 0.Это не то, что вы хотите.Регулярное выражение может помочь вам достичь вашей цели.

import re
output = [re.search(r'-([\w+]).json', x).group(0) for x in your_list]
0 голосов
/ 12 июня 2019

Первоначально список name = ['190523-105238-J105150.json', '190152-105568-J616293.json'].

List comprehensions в Python чрезвычайно полезны и мощны.

eq = [name[i][name[i].find("J"):name[i].rfind(".json")] for i in range(len(name))], понимание списка используется для создания нового списка значений из списка name путем нахождения начала в значении J и перехода к before .json. Результат find() имеет тип integer.

Полный код можно увидеть ниже.

def main():
    name = ['190523-105238-J105150.json', '190152-105568-J616293.json']
    eq = [name[i][name[i].find("J"):name[i].rfind(".json")] for i in range(len(name))]
    print(eq)


if __name__ == "__main__":
    main()

output: ['J105150', 'J616293']

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