【发布时间】:2021-09-20 22:47:44
【问题描述】:
我正在使用 python 2.7,基本上我的 python 脚本包括打开一个 csv 文件,循环进入行以查找具有用户输入的 id 的行。找到该行后,根据某些条件,脚本会使用用户输入的其他值更新三个列。
这是我的代码:
# -*-coding:Latin-1 -*
import csv
from csv import reader
from csv import DictReader
print("")
print("Sélectionez une operation.")
print("")
print("1. Mettre à jour les indicateurs des tables ENTREPRISE")
print("")
print("2. Mettre à jour les indicateurs des tables PARTICULIER")
print("")
# Nos fichiers csv
# PMGE
Bfr = csv.reader(open('/home/cloudera/PMGE/Bfr.csv'))
linesBfr = list(Bfr)
CredBailImmo = csv.reader(open('/home/cloudera/PMGE/CredBailImmo.csv'))
linesCredBailImmo = list(CredBailImmo)
def scoreBas(x,y):
return 6*0.5 + x*0.3 + y*0.2
def scoreMoyen(x,y):
return 4*0.5 + x*0.3 + y*0.2
def scoreEleve(x,y):
return 2*0.5 + x*0.3 + y*0.2
while True:
# Récupérer une entrée de l'utilisateur
choix = input("Entrez votre choix (1/2): ")
# Vérifions si le choix fait partie de nos options
if choix in (1, 2):
if choix == 1:
print("")
print("CHoisissez la table à modifier.")
print("")
print(" 1. Besoin en Fonds de Roulement")
print(" 2. Credit bail Immobilier")
print("")
while True:
choix = input("Entrez votre choix(1/ 2/: ")
if choix in (1, 2):
if choix == 1:
print("")
num1 = str(input("Entez le numéro de l'entreprise à modifier: "))
num2 = int(input("Entez la nouvelle valeur de l'indicateur de confiance: "))
num3 = int(input("Entez la nouvelle valeur de l'indicateur de persévérance: "))
i = 0
while linesBfr[i][0] != num1:
i +=1
#indx conf = 32; pers = 33; score = 34;
if linesBfr[i][0] == num1:
#affichage les valeurs actuelle
print("")
print("Ancienne valeur de l'indicateur de confiance:")
print(linesBfr[i][32])
print("Ancienne valeur de l'indicateur de persévérance:")
print(linesBfr[i][33])
print("Ancienne valeur du score:")
print(linesBfr[i][34])
#on modifie les indincateurs dans la liste
linesBfr[i][32] = num2
linesBfr[i][33] = num3
#on écris les modifications dans le fichier csv
writer = csv.writer(open('/home/cloudera/PMGE/Bfr.csv', 'w'))
writer.writerows(linesBfr)
#on modifie le score
if linesBfr[i][31] == 'Bas':
linesBfr[i][34] = scoreBas(int(linesBfr[i][32]),int(linesBfr[i][33]))
writer = csv.writer(open('/home/cloudera/PMGE/Bfr.csv', 'w'))
writer.writerows(linesBfr)
elif linesBfr[i][31] == 'Moyen':
linesBfr[i][34] = scoreMoyen(int(linesBfr[i][32]),int(linesBfr[i][33]))
writer = csv.writer(open('/home/cloudera/PMGE/Bfr.csv', 'w'))
writer.writerows(linesBfr)
else:
linesBfr[i][34] = scoreEleve(int(linesBfr[i][32]),int(linesBfr[i][33]))
writer = csv.writer(open('/home/cloudera/PMGE/Bfr.csv', 'w'))
writer.writerows(linesBfr)
#affichage des nouvelles valeurs
print(linesBfr[i][0])
print(linesBfr[i][31])
print("")
print("Nouvelle valeur de l'indicateur de confiance:")
print(linesBfr[i][32])
print("Nouvelle valeur de l'indicateur de persévérance:")
print(linesBfr[i][33])
print("Nouvelle valeur du score:")
print(linesBfr[i][34])
elif choix == 2:
for row in CredBailImmo :
print(row)
break
else:
print("Invalid Input")
elif choix == 2:
print("Choisissez la table à modifier.")
print("1. ")
print("2. ")
break
else:
print("Invalid Input")
但是当我执行脚本时,第三个值 linesBfr[i][34] 没有更新。 我尝试通过(转换为字符串)分别更改条件:
if str(linesBfr[i][31]) == 'Bas':
linesBfr[i][34] = scoreBas(int(linesBfr[i][32]),int(linesBfr[i][33]))
writer = csv.writer(open('/home/cloudera/PMGE/Bfr.csv', 'w'))
writer.writerows(linesBfr)
elif str(linesBfr[i][31]) == 'Moyen':
linesBfr[i][34] = scoreMoyen(int(linesBfr[i][32]),int(linesBfr[i][33]))
writer = csv.writer(open('/home/cloudera/PMGE/Bfr.csv', 'w'))
writer.writerows(linesBfr)
else:
linesBfr[i][34] = scoreEleve(int(linesBfr[i][32]),int(linesBfr[i][33]))
writer = csv.writer(open('/home/cloudera/PMGE/Bfr.csv', 'w'))
writer.writerows(linesBfr)
但还是一无所获。 谁能帮我弄清楚我做错了什么?
【问题讨论】:
-
您应该创建一个Minimal, Reproducible Example,而不是发布您的整个程序。这应该包括输入 csv 文件的匿名示例。尝试先让一个选项起作用,以便您理解并知道它起作用,然后扩展到您想要的所有选项。
-
您是否在问为什么您的条件语句不起作用?您是否确定这三个套件都没有执行?或者您是在问为什么当您随后查看文件时这些值没有改变?
-
如果您在使用 IDE现在是学习其调试功能或内置 Python debugger 的好时机。在程序中的关键点打印 stuff 可以帮助您跟踪正在发生或未发生的事情。 What is a debugger and how can it help me diagnose problems?。 How to debug small programs
-
@wwii 我已经应用了你的建议,我发现它只执行条件表达式的最后一部分“else”部分,即使满足第一个或第二个条件。
-
看起来在/之后有缩进问题:
if choix == 1: print(""); num1 = str(input("Entez ...- 请修复。
标签: python python-2.7 csv