Home > Blockchain >  How to format the output correct with combined methods?
How to format the output correct with combined methods?

Time:11-15

I have a combination of methods. And I try to fromat them correct.

So I have this functions:

from __future__ import print_function

import itertools
import locale
import operator
import re


verdi50 ="[' \n\na)\n\n \n\nFactuur\nVerdi Import Schoolfruit\nFactuur nr. : 71201 Koopliedenweg 33\nDeb. nr. : 108636 2991 LN BARENDRECHT\nYour VAT nr. : NL851703884B01 Nederland\nFactuur datum : 10-12-21\nAantal Omschrijving Prijs Bedrag\nOrder number : 77553 Loading date : 09-12-21 Incoterm: : FOT\nYour ref. : SCHOOLFRUIT Delivery date :\nWK50\nD.C. Schoolfruit\n16 Watermeloenen Quetzali 16kg 4 IMPERIAL BR I € 7,70 € 123,20\n360 Watermeloenen Quetzali 16kg 4 IMPERIAL BR I € 7,70 € 2.772,00\n6 Watermeloenen Quetzali 16kg 4 IMPERIAL BR I € 7,/0 € 46,20\n75  Watermeloenen Quetzali 16kg 4 IMPERIAL BR I € 7,70 € 577,50\n9 Watermeloenen Quetzali 16kg 4 IMPERIAL BR I € 7,70 € 69,30\n688 Appels Royal Gala 13kg 60/65 Generica PL I € 5,07 € 3.488,16\n22  Sinaasappels Valencias 15kg 105 Elara ZAI € 6,25 € 137,50\n80 Sinaasappels Valencias 15kg 105 Elara ZAI € 6,25 € 500,00\n160 Sinaasappels Valencias 15kg 105 FVC ZAI € 6,25 € 1.000,00\n320 Sinaasappels Valencias 15kg 105 Generica ZAI € 6,25 € 2.000,00\n160 Sinaasappels Valencias 15kg 105 Noordhoek ZA I € 6,25 € 1.000,00\n61  Sinaasappels Valencias 15kg 105 Noordhoek ZA I € 6,25 € 381,25\nTotaal Colli Totaal Netto Btw Btw Bedrag Totaal Bedrag\n€ 12.095,11 1.088,56\nBetaling binnen 30 dagen\nAchterstand wordt gemeld bij de kredietverzekeringsmaatschappij\nVerDi Import BV ING Bank NV. Rotterdam IBAN number: NL17INGB0006959173 ~~\n\n \n\nKoopliedenweg 38, 2991 LN Barendrecht, The Netherlands SWIFT/BIC: INGBNL2A, VAT number: NL851703884B01 i\nTel,  31 (0}1 80 61 88 11, Fax  31 (0)1 8061 88 25 Chamber of Commerce Rotterdam no. 55424309 VerDi\n\nE-mail: [email protected], www.verdiimport.nl Dutch law shall apply. The Rotterdam District Court shall have exclusive jurisdiction.\n\nrut ard wegetables\n\x0c']"

fruit_words = ['Appels', 'Ananas', 'Peen Waspeen',
               'Tomaten Cherry', 'Sinaasappels',
               'Watermeloenen', 'Rettich', 'Peren', 'Peen', 'Mandarijnen', 'Meloenen', 'Grapefruit']

def total_amount_fruit_regex(format_=re.escape):
    return r"(\d*(?:\.\d )*)\s*~?=?\s*("   '|'.join(
        format_(word) for word in fruit_words)   ')'

def total_fruit_per_sort():
    number_found = re.findall(total_amount_fruit_regex(), verdi50)

    fruit_dict = {}
    for n, f in number_found:
        fruit_dict[f] = fruit_dict.get(f, 0)   int(n)
        result = '\n'.join(f'{key}: {val}' for key, val in fruit_dict.items())   
    return result


def fruit_list(format_=re.escape):
        return "|".join(format_(word) for word in fruit_words)


def findallfruit(regex):
    return re.findall(regex, verdi50)


def verdi_total_number_fruit_regex():
    return rf"(\d*(?:\.\d )*)\s*\W (?:{fruit_list()})"


def show_extracted_data_from_file():
    regexes = [     
       verdi_total_number_fruit_regex(),       
    ] 
    matches = [findallfruit(regex) for regex in regexes]    
    return "\n".join(" \t ".join(items) for items in zip(*matches))   "\t"   total_fruit_per_sort()
    

print(show_extracted_data_from_file())

this give as output:

16
360
6
75
9
688
22
80
160
320
6
75
9
688
22
80
160
320
160
61      Watermeloenen: 466
Appels: 688
Sinaasappels: 803

But I want them like this:

16       Watermeloenen: 466
360      Appels: 688
6        Sinaasappels: 803
75
9
688
22
80
160
320
6
75
9
688
22
80
160
320
160
61 

So that they are next to each other. But how to do this?

CodePudding user response:

You're concatenating total_fruit_per_sort() at the end of the join. You need to concatenate it to the first 3 items being joined.

You can split it into lines, then use itertools.zip_longest() to loop over this in parallel with the generator.

def show_extracted_data_from_file():
    regexes = [
       verdi_total_number_fruit_regex(),
    ]
    matches = [findallfruit(regex) for regex in regexes]
    fruit_list = total_fruit_per_sort().split("\n")
    return "\n".join(" \t ".join(items) for items in zip_longest(*matches, fruit_list, fillvalue=''))
  • Related