簡體   English   中英

以特定格式寫入文件

[英]Writing in file with specific format

def sauvegarder_canaux(self, nom_fichier:str)是一種方法,當文件保存時,它僅以這種格式寫入時給我一個問題:

5 - TQS (Télévision Quatres-saisons, 0.0 $ extra) 

我需要像這樣:

5 : TQS : Télévision Quatres-saisons : 0.0 $ extra

這是我現在擁有的代碼:

from canal import Canal
from forfait_tv import ForfaitTV
from abonne import Abonne


#============= Classe ===========================
class Distributeur :
    """
    Description :
    ===========
    Cette classe gère les listes de canaux, de forfaits (et plus tard
    d'abonné).


    Données membres privées :
    ======================
    __canaux        # [Canal]     Liste de canaux existants
    __forfaits      # [ForfaitTV] Liste des forfaits disponibles
    """


    #-----------  Constructeur -----------------------------
    def __init__(self):
        self.__canaux = None
        self.__forfaits = None
        #code
        self.__canaux = [] #list
        self.__forfaits = [] #list





    #----------- Accesseurs/Mutateurs ----------------------
    def ajouter_canal(self,un_canal:Canal):
        self.__canaux.append(un_canal)


    def chercher_canal (self,p_poste:int):
        i=0
        postex = None
        poste_trouve=None
        for i in range(0,len(self.__canaux),1):
            postex=self.__canaux[i]
            if postex.get_poste()== p_poste:
                poste_trouve=postex
                return print(poste_trouve)



    def telecharger_canaux(self,nom_fichier:str):

        fichierCanaux = open(nom_fichier, "r")
        for line in fichierCanaux:
            eleCanal = line.strip(" : ")
            canal = Canal(eleCanal[0],eleCanal[1],eleCanal[2],eleCanal[3])
            self.__canaux.append(canal)
            return canal


    def sauvegarder_canaux(self, nom_fichier:str):
        fichCanaux = open(nom_fichier,"w")
        for i in self.__canaux:
            fichCanaux.write(str(i) + "\n")

        fichCanaux.close()

您只需要在編寫字符串之前就對其進行編輯。 字符串。 replace命令是您的朋友。 也許 ...

    for i in self.__canaux:
        out_line = str(i)
        for char in "-(,":
            out_line = out_line.replace(char, ':')
        fichCanaux.write(out_line + "\n")

如果可以刪除重音符號,則可以使用unicodedata將文本歸一化為NFD ,然后找到感興趣的unicodedata段,用所需的格式對其進行修改,然后使用regex將其替換為格式化的句段:

import unicodedata
import re

def format_string(test_str):
    # normalize accents
    test_str = test_str.decode("UTF-8")
    test_str = unicodedata.normalize('NFD', test_str).encode('ascii', 'ignore')

    # segment patterns
    segment_1_ptn = re.compile(r"""[0-9]*(\s)*                    # natural number
                                   [-](\s)*                       # dash
                                   (\w)*(\s)*                     # acronym
                                """,
                               re.VERBOSE)
    segment_2_ptn = re.compile(r"""(\w)*(\s)*                     # acronym
                                   (\()                           # open parenthesis
                                   ((\w*[-]*)*(\s)*)*             # words
                                """,
                               re.VERBOSE)
    segment_3_ptn = re.compile(r"""((\w*[-]*)*(\s)*)*             # words
                                   (,)(\s)*                       # comma
                                   [0-9]*(.)[0-9]*(\s)*(\$)(\s)   # real number
                                """,
                               re.VERBOSE)

    # format data
    segment_1_match = re.search(segment_1, test_str).group()
    test_str = test_str.replace(segment_1_match, " : ".join(segment_1_match.split("-")))
    segment_2_match = re.search(segment_2, test_str).group()
    test_str = test_str.replace(segment_2_match, " : ".join(segment_2_match.split("(")))
    segment_3_match = re.search(segment_3, test_str).group()
    test_str = test_str.replace(segment_3_match, " :     ".join(segment_3_match.split(",")))[:-1]
    test_str = " : ".join([txt.strip() for txt in test_str.split(":")])

    return test_str

然后,您可以在sauvegarder_canaux調用此函數

def sauvegarder_canaux(self, nom_fichier:str):
    with open(nom_fichier, "w") as fichCanaux
        for i in self.__canaux:
            fichCanaux.write(format_string(str(i)) + "\n")

您也可以在您的Distributeur類中添加format_string作為方法。

輸入示例: 5 - TQS (Télévision Quatres-saisons, 0.0 $ extra)

示例輸出: 5 : TQS : Television Quatres-saisons : 0.0 $ extra

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM