Bonjour, je cherche de l'aide pour faire comme une correspondance d'index dans Excel, je suis très nouveau dans Python mais mes ensembles de données sont beaucoup trop volumineux pour Excel maintenant

Je vais baisser ma question autant que possible car les données contiennent beaucoup d'informations non pertinentes à ce problème

CSV A (a 3 colonnes de base)

Name, Date, Value

CSV B (a 2 colonnes)

Value, Score

CSV C (je veux créer ceci en utilisant python; 2 colonnes)

Name, Score

Tout ce que je veux faire, c'est entrer une date et lui demander de rechercher toutes les lignes dans CSV A qui correspondent à cette «date», puis de rechercher le «score» associé à la «valeur» de cette ligne dans CSV A dans CSV B et de retourner dans CSV C avec le nom de la personne. Rincer et répéter à chaque rangée

Toute aide est très appréciée, je ne semble pas aller très loin

1
Hayden Botica 11 juil. 2015 à 07:27

2 réponses

Meilleure réponse

Voici un script de travail utilisant le module csv de Python:

Il invite l'utilisateur à saisir une date (le format est m-d-yy), puis lit csvA ligne par ligne pour vérifier si la date de chaque ligne correspond à la date saisie.

Si oui, il vérifie si la valeur qui correspond à la date de la ligne courante de A correspond à l'une des lignes de csvB.

S'il y a des correspondances, il écrira le nom de csvA et le score de csvB à csvC.

import csv
date = input('Enter date: ').strip()

A = csv.reader( open('csvA.csv', newline=''), delimiter=',')
matches = 0

# reads each row of csvA
for row_of_A in A:

    # removes whitespace before and after of each string in each row of csvA
    row_of_A = [string.strip() for string in row_of_A]

    # if date of row in csvA has equal value to the inputted date
    if row_of_A[1] == date:
        B = csv.reader( open('csvB.csv', newline=''), delimiter=',')

        # reads each row of csvB
        for row_of_B in B:

            # removes whitespace before and after of each string in each row of csvB
            row_of_B = [string.strip() for string in row_of_B]

            # if value of row in csvA is equal to the value of row in csvB
            if row_of_A[2] == row_of_B[0]:

                # if csvC.csv does not exist
                try:
                    open('csvC.csv', 'r')
                except:
                    C = open('csvC.csv', 'a')
                    print('Name,', 'Score', file=C)

                C = open('csvC.csv', 'a')

                # writes name from csvA and value from csvB to csvC
                print(row_of_A[0] + ', ' + row_of_B[1], file=C)

m = 'matches' if matches > 1 else 'match'
print('Found', matches, m)

Exemples de fichiers csv:

CsvA.csv

Name, Date, Value
John, 2-6-15, 10
Ray, 3-5-14, 25
Khay, 4-4-12, 30
Jake, 2-6-15, 100

CsvB.csv

Value, Score
10, 500
25, 200
30, 300
100, 250

Exemple d'exécution:

>>> Enter date: 2-6-15
Found 2 matches

CsvC.csv (généré par script)

Name, Score
John, 500
Jake, 250
0
raymelfrancisco 11 juil. 2015 à 11:10

Si vous utilisez unix, vous pouvez le faire en utilisant le script shell ci-dessous.Je suppose également que vous ajoutez la sortie de recherche dans file_C et qu'il n'y a pas de duplication dans les deux fichiers source


Alors que c'est vrai

Faire

Echo "entrer la date ..."

Date de lecture

Value_one = grep $date file_A | cut -d',' -f1

Tmp1 = grep $date' file_A | cut -d',' -f3

Value_two = grep $tmp1 file_B | cut -d',' -f2

Echo "$ {value_one}, $ {value_two}" >> file_c

Echo "veut rechercher plus de dates ... appuyez sur y | Y, appuyez sur n'importe quelle autre touche pour quitter"

Lire ch

Si ["$ ch" = "y"] || ["$ ch" = "y"]

Ensuite

Continuer

Autre

Sortie

Fi

Terminé

0
Siddharth Nobell 11 juil. 2015 à 05:32