python - 为什么第二个循环从未执行?
问题描述
嗨,我实际上正在开发一个 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 循环后面的内容。我认为这可能是一个非常基本的错误,但我无法理解。
有什么帮助吗?
解决方案
您正在尝试迭代 CSV 两次而不重置它。这就是您的数据数组为空的原因。
您第一次实际迭代文件时:
for lecline in lecfi:
第二次,原来的迭代器已经结束并且是空的:
for co in lecfi:
正如 Johnny Mopp 在评论中提到的,一种可能的解决方案是使用以下方法:
希望这能解释你的问题。
推荐阅读
- php - 带有变量的来自和到 PHP 的 Guzzle POST 请求
- javascript - 我正在尝试使用 client.js 进行 trello 身份验证。无论我使用什么网址,我都会收到无效的 return_url
- ios - 是否允许简单的 GPS 应用程序使用 Car play 框架?
- amazon-cloudfront - AWS CloudFront 将新域添加到分发并设置新证书
- android - 如何从 Android Q 中的“webview”访问“图片文件夹(公共目录)中的图像”?
- azure - Azure tfs-cli 不包括所有文件 (.vsix)
- html - 如何在同一行中制作带有标签的响应式按钮组
- mongodb - Loopback/mongodb:查找所有共享某项技能的工作
- python - 合并其中一列或另一列中缺少数据的数据框
- codeigniter - codeignite 3. 相同的 url 为单个项目中的相同键设置不同的配置值