Печать Python до / после разных строк

Примечание : Это ответ полезен для стандартной библиотеки Python ElementTree без использования жестко заданных пространств имен.

Чтобы извлечь префиксы и URI из пространства имен из данных XML, вы можете использовать функцию ElementTree.iterparse , разбор только событий начала пространства имен ( start-ns ):

>>> from io import StringIO
>>> from xml.etree import ElementTree
>>> my_schema = u'''<rdf:RDF xml:base="http://dbpedia.org/ontology/"
...     xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
...     xmlns:owl="http://www.w3.org/2002/07/owl#"
...     xmlns:xsd="http://www.w3.org/2001/XMLSchema#"
...     xmlns:rdfs="http://www.w3.org/2000/01/rdf-schema#"
...     xmlns="http://dbpedia.org/ontology/">
... 
...     <owl:Class rdf:about="http://dbpedia.org/ontology/BasketballLeague">
...         <rdfs:label xml:lang="en">basketball league</rdfs:label>
...         <rdfs:comment xml:lang="en">
...           a group of sports teams that compete against each other
...           in Basketball
...         </rdfs:comment>
...     </owl:Class>
... 
... </rdf:RDF>'''
>>> my_namespaces = dict([
...     node for _, node in ElementTree.iterparse(
...         StringIO(my_schema), events=['start-ns']
...     )
... ])
>>> from pprint import pprint
>>> pprint(my_namespaces)
{'': 'http://dbpedia.org/ontology/',
 'owl': 'http://www.w3.org/2002/07/owl#',
 'rdf': 'http://www.w3.org/1999/02/22-rdf-syntax-ns#',
 'rdfs': 'http://www.w3.org/2000/01/rdf-schema#',
 'xsd': 'http://www.w3.org/2001/XMLSchema#'}

Затем словарь может быть передан как аргумент в функции поиска:

root.findall('owl:Class', my_namespaces)
2
задан Diu.Lei 6 March 2019 в 00:27
поделиться

3 ответа

Разделите функции. Получите список изображений, затем обработайте его:

def bbcode(images):
    for i in range(0,len(images),5):
        print('[tr]')
        for image in images[i:i+5]:
            print(f'[td][center]Label[img]{image}[/img][/center][/td]')
        print('[/tr]')

def get_images():
    images = []
    while True:
        image = input('Image? ')
        if not image: break
        images.append(image)
    return images

images = get_images()
bbcode(images)

Вы можете сделать это как один длинный скрипт, но это не так ясно:

count = 0

while True:
    image = input('Image? ')
    if not image:
        break

    count = (count + 1) % 5
    if count == 1:
        print('[tr]')
    print(f'[td][center]Label[img]{image}[/img][/center][/td]')
    if count == 0:
        print('[/tr]')

if count != 0:
    print('[/tr]')
0
ответ дан Mark Tolonen 6 March 2019 в 00:27
поделиться

Ниже приведен результат с некоторыми комментариями. Чтобы обновить ваши спецификации, просто установите переменную max_item_blocks на то, что вы хотите.

### your main body element with {} to pass a number
element = '[td][center]Label[img]Image{}.jpg[/img][/center][/td]'

### The number of "blocks" you want to print.
max_item_blocks = 3

### Define a start value of 1
start = 1

### Our simple loop with join() function
while max_item_blocks > 0:

    ### End value is start + 5
    end = start + 5

    print('[tr]\n' + '\n'.join([element.format(i) for i in range(start, end)]) + '\n[\\tr]')

    ### Start takes ending value
    start = end

    ### Ending value is now start + 5
    end = start + 5

    ### Reduce our block counts by 1
    max_item_blocks -= 1

Выход для 3 блоков:

[tr]
[td][center]Label[img]Image1.jpg[/img][/center][/td]
[td][center]Label[img]Image2.jpg[/img][/center][/td]
[td][center]Label[img]Image3.jpg[/img][/center][/td]
[td][center]Label[img]Image4.jpg[/img][/center][/td]
[td][center]Label[img]Image5.jpg[/img][/center][/td]
[\tr]
[tr]
[td][center]Label[img]Image6.jpg[/img][/center][/td]
[td][center]Label[img]Image7.jpg[/img][/center][/td]
[td][center]Label[img]Image8.jpg[/img][/center][/td]
[td][center]Label[img]Image9.jpg[/img][/center][/td]
[td][center]Label[img]Image10.jpg[/img][/center][/td]
[\tr]
[tr]
[td][center]Label[img]Image11.jpg[/img][/center][/td]
[td][center]Label[img]Image12.jpg[/img][/center][/td]
[td][center]Label[img]Image13.jpg[/img][/center][/td]
[td][center]Label[img]Image14.jpg[/img][/center][/td]
[td][center]Label[img]Image15.jpg[/img][/center][/td]
[\tr]
0
ответ дан Mark Moretto 6 March 2019 в 00:27
поделиться

После прочтения того, что вы написали 5 раз, я верю, что вы хотите:

    print("[tr]")
    while True:
        counter = 0
        UserInput = input("")
        if UserInput == "exit":
            exit(0)
        print("[tr]", end = "")
        while (counter !=5):
            print ("[td][center]Label\n" + "[img]" + str(UserInput) + "[/img][/center][/td]")
            counter += 1
        print ("[/tr]")
    print("[/tr]")

Итак, что здесь происходит, вы печатаете [tr] в той же строке, что и первый отпечаток изнутри, пока вы в розыске. [/ tr] находится в новой строке, но вы можете поместить ее в ту же строку, добавив end = "" и ко второму выводу.

0
ответ дан Miguel 6 March 2019 в 00:27
поделиться
Другие вопросы по тегам:

Похожие вопросы: