Mon fichier CSV ressemble à ce 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. P> Voici ce que mon code ressemble. (Je ne veux pas importer aucune bibliothèque de pandas.) p>
5 Réponses :
notant que vous vouliez spécifiquement éviter d'importer les bibliothèques em> (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 P>
blockQuote> alors vous pouvez faire quelque chose comme ceci: p> à 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. p> p>
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)
ligne 5, dans
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 code>, pouvez-vous ajouter impression (ligne) code> 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
J'utiliserais csv.dicterreader 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']) code> p> p>
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'}
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?
# 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
c'est impossible. Même Pandas utilise d'autres bibliothèques intégrées à Python. Pourquoi avez-vous une telle tâche?
Vous pouvez utiliser
csv.reader code> a > (de la bibliothèque standard) pour lire le fichier.Utilisation de la CSV.Reader Comment puis-je le faire
C'est un duplicata exact de Comment lire un fichier CSV et des valeurs de somme de CSV en fonction de la saisie de l'utilisateur? par le même op.