繁体   English   中英

在 .txt 文件中找到不正确的行并将其删除

[英]Find an incorrect line in a .txt file and delete it

我有一个带有 csv 数据的.txt文件,如下所示:

1529074866;29.89;29.41;321;70;1;60;1003.05

1529074868;29.87;29.82;140;79;1;60;1003.52

我做了这个函数来从文件中提取数据:

 def __init__(self, file):
 
    self.data_ = {"Temps": [], "Temperature": [], "Humidite": [], "Luminosite": [], "Niveau sonore": [], "Radiations EM": [], "Rythme cardiaque": [], "Pression": [] }
    # data_ = {date : [t1, t2,...], temp : [temp1, temp2,...]...}. Cette disposition des données (par date, luminosité...) permet d'optimiser l affichage des graphiques ulterieurement.
    
    try:    
        
        for line in file:  # Cette commande permet de parcourir une à une toutes les lignes du fichier file. 
            
            line = line.rstrip()    # Cette commande permet de supprimer le caractère invisible de retour chariot en fin de ligne.
            line = line.rsplit(";") # Cette commande permet de transpormer la ligne en liste en coupant au niveau des ";".
            
            self.data_["Temps"].append( int(line[0]) )  # Ceci implique que la donnée correspondant à la date soit bien la 1ère donnée (rang 0) sur la ligne.
            self.data_["Temperature"].append( float(line[1]))   # Ceci implique que la donnée correspondant à la date soit bien la 2ème donnée (rang 1) sur la ligne.
            self.data_["Humidite"].append( float(line[2]) )  # ect
            self.data_["Luminosite"].append( float(line[3]) )
            self.data_["Niveau sonore"].append( float(line[4]) )
            self.data_["Radiations EM"].append( float(line[5]))
            self.data_["Rythme cardiaque"].append( float(line[6]) )
            self.data_["Pression"].append( float(line[7]) )
        
    except Exception as expt :  # Cette exception est executee si l'execution du bloc try si dessus a echoue.
        print("\n!!! Echec de l'importation - exception relevee !!!")
        print expt

我想创建一个函数来提取该行的第一个参数,即 Unix 时间,如果时间不在[1514761200; 1546297200] [1514761200; 1546297200] ,删除该行。

我怎样才能做到这一点?

要从文件中删除一行,您实际上要完全读取它,然后重写过滤后的文件。

一种方法:

data_typo = "1529074866;29.89;29.41;321;70;1;60;1003.05\n"

with open("file.txt", "r") as f:
    lines = f.readlines() # Extract all the lines

data = [line.rstrip().split(";") for line in lines]

# data elements: ['1529074866', '29.89', '29.41', '321', '70', '1', '60', '1003.05']

此时,一个简单的方法是过滤列表数据。

def criterion(elt):
    if 1514761200 <= eval(elt[0]) and eval(elt[0]) <= 1546297200:
         return True
    else:
         return False

data_to_rewrite = list(filter(criterion, data)) # Keeps the elements where criterion returns True.

with open("new_file.txt", "w") as f:
    for elt in data_to_rewrite:
        line = ";".join(elt) + "\n"
        f.write(line)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM