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

时间:2018-06-18 08:14:44

标签: python

我是python的初学者,我需要一些项目的帮助 我有一个带有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]之间则删除行

你能帮帮我吗?非常感谢

1 个答案:

答案 0 :(得分:1)

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

一种方法:

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)