如何查询csv文件并更新值

2024-06-26 14:37:44 发布

您现在位置:Python中文网/ 问答频道 /正文

我使用的是Python2.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)

但还是什么都没有。 谁能帮我找出我做错了什么


Tags: csvhomeifdeopenintwriterprint
1条回答
网友
1楼 · 发布于 2024-06-26 14:37:44

这不是答案-如果简化有问题的条件表达式,可能会使您更容易进行故障排除

name = str(linesBfr[i][31])
if name == 'Bas':
    placeholder = scoreBas
elif name == 'Moyen':
    placeholder = scoreMoyen
else:
    placeholder = scoreEleve
linesBfr[i][34] = placeholder(int(linesBfr[i][32]),int(linesBfr[i][33]))

with open('/home/cloudera/PMGE/Bfr.csv', 'w') as f:
    writer = csv.writer(f)
    writer.writerows(linesBfr)

相关问题 更多 >