Jak vytisknout protokoly transakcí z určitého rozmezí měsíců v Pythonu

0

Otázka

Zde je příklad z mé záznamy do souboru txt (trans.txt):

22. července 2021 09:35:54 Staženo: RM500

22. července 2021 09:35:54 Staženo: RM500

22. srpna 2021 09:35:54 Staženo: RM500

22. srpna 2021 09:35:54 Staženo: RM500

22. září 2021 09:35:54 Staženo: RM500

22. září 2021 09:35:54 Staženo: RM500

22. září 2021 09:35:54 Staženo: RM500

22. října 2021 09:35:54 Staženo: RM500

22. října 2021 09:35:54 Staženo: RM500

22. listopadu 2021 09:35:54 Staženo: RM500

22. listopadu 2021 09:35:54 Staženo: RM500

22. prosince 2021 09:35:54 Staženo: RM500

22. prosince 2021 09:35:54 Staženo: RM500

jak vytisknout určitý rozsah protokoly založené na měsíce? Představte si, že pokud chci tisknout protokoly čtvrtletní nebo pololetní, a můj pc místní čas je.listopadu.

Očekávám python vytisknout všechny protokoly od září do listopadu, protože chci vytisknout protokoly čtvrtletně na základě mého místního času.

EDIT:

Níže jsou můj pokus, ale stále nemůže dosáhnout toho, co jsem zamýšlel

# ↓Pulls out local time's from user pc
local_timeMonth = time.strftime("%B", obj)

# ↓Opens user's transaction logs and put them in a list
hand1 = open("trans.txt", "r")
list1 = hand1.read().splitlines()
hand1.close()

# ↓Creates a another file to store all logs with the month that is 
# intended to be printed and excludes months that are not relevant,
# but all it does is store logs from November back until January 
#it excludes December though (Pc local time is November)

for i in range(0, len(list1)):
    if local_timeMonth in list1[i]:
        test = "\n".join(list1[i::-1])
        hand = open("tempLogs.txt", "w")
        hand.write(test)
        hand.close()

        # ↓Place logs only from 3 months into list
        f = open("tempLogs.txt", "r")
        line_numbers = [0, 1, 2]
        lines = []
        # ↓Puts specific month's of log in to another list
        for i, line in enumerate(f):
            if i in line_numbers:
                lines.append(line.strip())
            elif i > 2:
                break
        # ↓Print list out into readable format
        for i in lines:
            print(i)
        f.close()
datetime logging python python-3.x
2021-11-23 06:30:40
1

Nejlepší odpověď

0

Zde je naivní způsob, jak zpracovat vaše záznamy.

Pojďme importovat data, které jste poskytli ve vašem MCVE:

import io
import pandas as pd

text = io.StringIO("""22 July 2021 09:35:54 Withdrawn: RM500
22 July 2021 09:35:54 Withdrawn: RM500
22 August 2021 09:35:54 Withdrawn: RM500
22 August 2021 09:35:54 Withdrawn: RM500
22 September 2021 09:35:54 Withdrawn: RM500
22 September 2021 09:35:54 Withdrawn: RM500
22 September 2021 09:35:54 Withdrawn: RM500
22 October 2021 09:35:54 Withdrawn: RM500
22 October 2021 09:35:54 Withdrawn: RM500
22 November 2021 09:35:54 Withdrawn: RM500
22 November 2021 09:35:54 Withdrawn: RM500
22 December 2021 09:35:54 Withdrawn: RM500
22 December 2021 09:35:54 Withdrawn: RM500""")
frame = pd.read_csv(text, header=None, names=["raw"])

Pokud se přidá oddělovač mezi razítko a zprávu nebo formátování data v pevné délky formátu jako ISO-8601 není možnost, pak budete potřebovat vyrovnat se s další výzvu: vaše data není Pevná S Formátu ani CSV formát souboru.

Pojďme analyzovat syrové linky naivně (asi není efektivní při škálování):

raw = frame.pop("raw")
frame["timestamp"] = raw.apply(lambda x: pd.to_datetime(" ".join(x.split(" ")[:4])))
frame["type"] = raw.apply(lambda x: x.split(" ")[4].replace(":", ""))
frame["message"] = raw.apply(lambda x: " ".join(x.split(" ")[5:]))
frame = frame.set_index("timestamp")

Jakmile je váš rám je nastavení, indexování čtvrtletní je stejně jednoduché jako:

t0 = pd.Timestamp.now().round("1D")
q1 = t0 - pd.offsets.QuarterBegin(n=1)
q2 = t0 + pd.offsets.QuarterEnd(n=0)
frame.loc[q1:q2,:]

Která vrací očekává, že řádky:

                          type message
timestamp                             
2021-09-22 09:35:54  Withdrawn   RM500
2021-09-22 09:35:54  Withdrawn   RM500
2021-09-22 09:35:54  Withdrawn   RM500
2021-10-22 09:35:54  Withdrawn   RM500
2021-10-22 09:35:54  Withdrawn   RM500
2021-11-22 09:35:54  Withdrawn   RM500
2021-11-22 09:35:54  Withdrawn   RM500
2021-12-22 09:35:54  Withdrawn   RM500
2021-12-22 09:35:54  Withdrawn   RM500

Máte-li analyzovat velký objem logů, pak jste pravděpodobně bude muset zlepšit výkon této naivní řešení. Dobrý začátek by byl v každém případě změnit formát protokolu do známého formátu buď CSV nebo FWF.

2021-11-23 10:31:07

Aha..... teď už vím, jak se s tím vypořádat. Děkuji moc za pomoc
Darren LK

V jiných jazycích

Tato stránka je v jiných jazycích

Русский
..................................................................................................................
Italiano
..................................................................................................................
Polski
..................................................................................................................
Română
..................................................................................................................
한국어
..................................................................................................................
हिन्दी
..................................................................................................................
Français
..................................................................................................................
Türk
..................................................................................................................
Português
..................................................................................................................
ไทย
..................................................................................................................
中文
..................................................................................................................
Español
..................................................................................................................
Slovenský
..................................................................................................................