-1
votes

Importer le fichier CSV et faire des opérations arithmétiques sans importer aucune bibliothèque à Python

Mon fichier CSV ressemble à ce xxx

Ma question est la suivante: Sans importer aucun fichier de bibliothèque Comment puis-je lire un fichier CSV et un utilisateur doit entrer le numéro et le programme mobiles doivent afficher l'utilisation des données de ce numéro. IE: Opération arithmétique (ajout de la liaison montante et liaison descendante) et obtenez le résultat (données totales utilisées) de ce numéro de téléphone mobile spécifique.

Voici ce que mon code ressemble. (Je ne veux pas importer aucune bibliothèque de pandas.) xxx


4 commentaires

5 Réponses :


0
votes

notant que vous vouliez spécifiquement éviter d'importer les bibliothèques (je suppose que cela signifie que vous souhaitez éviter d'importer même des modules inclus) - Pour un fichier trivial (je nommé un supermarché.csv, le Le contenu ressemble à ceci):

ID, adresse, ville, état, pays, nom, employés 1 3666 21e St, San Francisco, CA 94114, Etats-Unis, Madère, 8 2 735 Dolores ST, San Francisco, CA 94119, Etats-Unis, Breaste Shop, 15 3 332 Hill St, San Francisco, Californie 94114, Etats-Unis, Super River, 25 4 3995 23rd ST, San Francisco, CA 94114, Etats-Unis, Ben's Shop, 10 5,1056 Sanchez St, San Francisco, Californie, États-Unis, Sanchez, 12 6 551 Alvarado St, San Francisco, CA 94114, États-Unis, Richvalley, 20

alors vous pouvez faire quelque chose comme ceci: xxx

à partir d'ici, vous pouvez manipuler votre entrée dans la liste à l'aide d'outils de chaîne et de compréhensions de liste.


0 commentaires

0
votes

Vous pouvez essayer Ouvrir code> qui ne nécessite aucune bibliothèque, de lire votre fichier, puis de la saisir avec Readlines code>. Divisez la ligne et vérifiez votre état en fonction de la place dans le fichier que vos données sont.

usage=0
with open('test.csv', 'r') as f:
    for line in f.readlines():
        try:
            line_sp = line.split(';')
            if line_sp[1]=='+917777777777':
                usage += int(line_sp[2])+int(line_sp[3])
        except:
            #print(line)
            pass 
print (usage)


4 commentaires

ligne 5, dans si ligne_sp [1] == '+ 9177777777777': IndexError: index de liste hors de portée


Ce serait que la ligne d'entrée ne soit pas la ";" ligne délimitée. Par exemple, si vous avez une ligne vide ajoutée à la fin, vous verriez cette erreur. Vous voudrez peut-être tester si la ligne_SP a 6 éléments comme prévu, et s'il ne s'agit pas de la ligne d'impression et de dire que cela ne peut pas traiter cette ligne, comme ça.


@MoheDameahmed Voir la modification avec essayer sauf si vous souhaitez voir quelle est l'erreur dans les lignes Un-commentez l'impression pour voir la ligne, sinon elle devrait fonctionner


@MoHameDahmed j'ai essayé avec les données que vous avez données et que vous avez 431596, qui est la même valeur que votre morceau de code me donner trop d'échantillon de données, donc je ne peux donc pas reproduire votre probelm. Peut-être avant le essayer , pouvez-vous ajouter impression (ligne) et voir si le délimiteur est incorrect ou coller dans le commentaire du résultat d'une impression avec le bon numéro de téléphone mobile vouloir calculer



1
votes

J'utiliserais csv.dicterreader xxx

Vous puis traitez la liste des dict pour un numéro de téléphone mobile donné par quelque chose comme Utilisation = somme (float (_ "Télécharger] ) + float (_ ['upload']) pour _ dans DCT ['+ 91777777777'])


0 commentaires

0
votes

une combinaison de CSV et DefaultDict peut adapter votre cas d'utilisation:

new_d = {}
for k,v in d.items():
    kb = sum(v)
    mb = kb/1024
    gb = kb/1024**2
    usage = F"{kb}KB/{mb:.2f}MB/{gb:.2f}GB"
    new_d[k] = usage

print(new_d)
{'+917777777777': '431596KB/421.48MB/0.41GB',
 '+919999999999': '349224KB/341.04MB/0.33GB',
 '+919123456654': '353440KB/345.16MB/0.34GB',
 '+919123456543': '346624KB/338.50MB/0.33GB'}


4 commentaires

Quand j'utilise l'impression (somme (D.get ("+ 9199999999999999999))) ne montre pas le montant 431596


Qu'est-ce que ça te donne?


Mon nom de fichier est log.csv (pas un fichier txt) Je souhaite obtenir la sortie comme Entrez le numéro de téléphone portable pour obtenir l'utilisation: Utilisation: +917777777777 Utilisation mensuelle totale est: 431596 KB / 421.48MB / 0.41GB


Bien sûr, il peut être réarrangé. Mais la somme fonctionne-t-elle pour une utilisation juste?



0
votes

Utilisation Aucun modules importés
# read file and create dict of phone numbers
phone_dict = dict()
with open('test.csv') as f:
    for i, l in enumerate(f.readlines()):
        l = l.strip().split(';')
        if (i != 0):
            mobile = l[1]
            download = int(l[2])
            upload = int(l[3])
            if phone_dict.get(mobile) == None:
                phone_dict[mobile] = {'download': [download], 'upload': [upload]}
            else:
                phone_dict[mobile]['download'].append(download)
                phone_dict[mobile]['upload'].append(upload)


print(phone_dict)
{'+917777777777': {'download': [213455, 213455], 'upload': [2343, 2343]},
 '+919999999999': {'download': [345656], 'upload': [3568]},
 '+919123456654': {'download': [345789], 'upload': [7651]},
 '+919123456543': {'download': [342467], 'upload': [4157]}}

# function to return usage
def return_usage(data: dict, number: str):
    download_usage = sum(data[number]['download'])
    upload_usage = sum(data[number]['upload'])

    return download_usage + upload_usage

# get user input to return usage
number = input('Please input a phone number')

usage = return_usage(phone_dict, number)
print(usage)
>>> Please input a phone number (numbers only) +917777777777
>>> 431596


0 commentaires