首页 > 解决方案 > 为什么第二个循环从未执行?

问题描述

嗨,我实际上正在开发一个 python 程序,我需要读取一个 csv 文件并使用 data.append(line) 来填充一个数据数组。

我编写了程序的以下部分:

print "Lecture du fichier", table1
lecfi = csv.reader(open(table1,'r'),skipinitialspace = 'true',delimiter='\t')
# delimiter = caractere utilisé pour séparer les différentes valeurs

tempSize = 0
tempLast = ""
oldSize = 0
#on initialise la taille du fichier et la derniere ligne du fichier 
if os.path.exists(newFilePath):
    tempSize = os.path.getsize(newFilePath) 
else:
    tempSize = 0
if os.path.exists(newFilePath) and tempSize != 0:
    #Si le fichier tampon n'existe pas, on le créer
    #Lecture du fichier tampon      
    lecofi = csv.reader(open(newFilePath,'r'),skipinitialspace = 'true',delimiter='\t')             
    csvFileArray = []
    for lo in lecofi:
        csvFileArray.append(lo)
    tempLast = str(csvFileArray[0])
    tempLast = tempLast[2:-2]
    oldSize = csvFileArray[1]               
    print "Tempon de Last : ", tempLast
    print "Taille du fichier : ", str(oldSize)   
    #on récupere la ligne représentant la derniere ligne de l'ancien fichier
else:
    #si le fichier n'existe pas, on lui laisse cette valeur par défaut pour le traitement suivant
        tempLast = None

    # remplissage des données du fichier pulse dans la variable data
cpt = 0
indLast = 0
fileSize = os.path.getsize(table1)
if oldSize != fileSize:
    for lecline in lecfi:
        cpt = cpt + 1
        last = str(lecline)
        if tempLast != None and last == tempLast:
            print "TEMPLAST != NONE", cpt
            indLast = cpt
            print "Indice de la derniere ligne : ", indLast
    print last, tempLast
    print "Variable indLast : ", indLast
    i = 0
    for co in lecfi:
        print "\nCOOOOOOO : ", co
        if i == indLast:
            data.append(co[0])
        i=i+1
    for da in data:
        print "\n Variable data : ", da

现在看看打印:

Lecture du fichier Data_Q1/2018-05-23/2018-5-23_13-1-35_P_HOURS_Q1
Tempon de Last :  ['(2104.72652']
Taille du fichier :  ['20840448']
TEMPLAST != NONE 317127
Indice de la derniere ligne :  317127
['(2104.72652'] ['(2104.72652']
Variable indLast :  317127

似乎该程序并不关心我的 for 循环后面的内容。我认为这可能是一个非常基本的错误,但我无法理解。

有什么帮助吗?

标签: python

解决方案


您正在尝试迭代 CSV 两次而不重置它。这就是您的数据数组为空的原因。

您第一次实际迭代文件时:

for lecline in lecfi:

第二次,原来的迭代器已经结束并且是空的:

for co in lecfi:

正如 Johnny Mopp 在评论中提到的,一种可能的解决方案是使用以下方法:

Python csv.reader:如何返回文件顶部?

希望这能解释你的问题。


推荐阅读