Προς το περιεχόμενο

Εισαγωγή csv μόνο νέες εγγραφές


Spect~

Προτεινόμενες αναρτήσεις

  • Moderators

Επανέρχομαι με ενα νέο πρόβλημα!

Θέλω να φτιάξω ενα αρχείο google sheets ή excel, για να κρατάω ενα ιστορικό με κάποιες κινήσεις οι οποιες θα γίνονται import απο ενα csv αρχειο. Το αρχειο καθε φορά θα περιέχει νεες εγγραφές αλλα εγω θελω να γίνονται import μόνο οι νέες, δηλαδη αυτες που δεν θα υπάρχουν στο εξελ μου. Πως θα γινει στο import να κραταω μονο τις νεες; Καθε γραμμη εχει ενα unique ID που μπορει να χρησιμοποιηθει. 

ΥΓ: βγαινει μονο σε csv το εξπορτ και δεν μπορω να το αλλαξω αυτο 

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

  • Απαντ. 30
  • Δημ.
  • Τελ. απάντηση

Συχνή συμμετοχή στο θέμα

Μια απλη λυση θα ηταν να κανεις import ολο το αρχειο και μετα να κανεις remove duplicates σε ολες τις στηλες εκτος απο το ID

Απλα σε περιπτωση που ειναι σημαντικο να κρατησεις την υφισταμενη ID και οχι την καινουργια, πρεπει να προσεξεις πως θα ειναι σορταρισμενο το αρχειο πριν το remove duplicates

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

  • Moderators
5 λεπτά πριν, archer100 είπε

Μια απλη λυση θα ηταν να κανεις import ολο το αρχειο και μετα να κανεις remove duplicates σε ολες τις στηλες εκτος απο το ID

Απλα σε περιπτωση που ειναι σημαντικο να κρατησεις την υφισταμενη ID και οχι την καινουργια, πρεπει να προσεξεις πως θα ειναι σορταρισμενο το αρχειο πριν το remove duplicates

Πρεπει να κραταω το υπαρχων γιατι θα προσθεετω μια δυο στειλες εγω. Το θεμα ειναι να μην χρειαζεται να το κανω καθε φορα χειροκινητα. 

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

Μπορει να γινει πολυ ευκολα με Python

Απλα θελει πρεπει να ξερεις πως να τρεξεις το αρχειο και φυσικα να γραφτει ο σχετικος κωδικας (οχι τιποτα ιδιαιτερο, καμια 10-15 γραμμες)

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

  • Moderators
3 λεπτά πριν, archer100 είπε

Μπορει να γινει πολυ ευκολα με Python

Απλα θελει πρεπει να ξερεις πως να τρεξεις το αρχειο και φυσικα να γραφτει ο σχετικος κωδικας (οχι τιποτα ιδιαιτερο, καμια 10-15 γραμμες)

Να το κανω σε python για να βρισκει τις νεες εγγραφες και να κανει import μονο τις νεες; ετσι θα μπορουσα να το βαλω να κατεβαζει και το αρχειο μονο του (αν γινεται)

 

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

1 λεπτό πριν, Spect~ είπε

Να το κανω σε python για να βρισκει τις νεες εγγραφες και να κανει import μονο τις νεες; ετσι θα μπορουσα να το βαλω να κατεβαζει και το αρχειο μονο του (αν γινεται)

 

Ακριβως, θα εισαγει μονο τις νεες. Και φυσικα μπορει να κατεβασει το αρχειο αυτοματα απο καποιο σαιτ με λιγο κωδικα ακομα

  • Thanks 1
Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

  • Moderators
1 λεπτό πριν, archer100 είπε

Ακριβως, θα εισαγει μονο τις νεες. Και φυσικα μπορει να κατεβασει το αρχειο αυτοματα απο καποιο σαιτ με λιγο κωδικα ακομα

Ναι προγραμματιστικα φυσικα και γινεται αλλα αναφέρομαι στο κομματι της συνδέσεις στη σελιδα ή αν πχ το λινκ ειναι καθε φορα το ιδιο κλπ.

Απο την αλλη γιατι να μην γινει απευθειας σε VBA? Εκτος απο τις δυνατότητες και ευκολιες που σου δινει η python το να εχεις απλα ενα αρχειο και να το τρεχεις απο εκει 

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

1 λεπτό πριν, Spect~ είπε

Ναι προγραμματιστικα φυσικα και γινεται αλλα αναφέρομαι στο κομματι της συνδέσεις στη σελιδα ή αν πχ το λινκ ειναι καθε φορα το ιδιο κλπ.

Απο την αλλη γιατι να μην γινει απευθειας σε VBA? Εκτος απο τις δυνατότητες και ευκολιες που σου δινει η python το να εχεις απλα ενα αρχειο και να το τρεχεις απο εκει 

Φυσικα μπορει να γινει και σε VBA 

Απλα δεν γνωριζω προσωπικα VBA για να γνωμοδοτησω 

  • Like 1
Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

Μιας και είσαι Excel και δεν έχει πρόσβαση σε queries θα κανεις εισαγωγή το CSV με VBA σε 1 προσωρινό sheet...θα φορτώσεις το Υπάρχον φύλλο και το φύλλο του CSV σε 2 ξεχωριστά Recordset και θα κάνεις iterate to 2o Recordset(CSV) και θα ελέγχεις εαν υπαρχει το ID στο 1ο..ειδάλλως AddNew

  • Like 1
Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

1 ώρα πριν, Spect~ είπε

Να το κανω σε python για να βρισκει τις νεες εγγραφες και να κανει import μονο τις νεες; ετσι θα μπορουσα να το βαλω να κατεβαζει και το αρχειο μονο του (αν γινεται)

 

Σε Python μπορείς να πάρεις τις υφιστάμενες εγγραφές σε ένα set και μετά να κάνεις update αυτό το set με όλες τις εγγραφές που θέλεις να βάλεις. Επειδή είναι set, θα κρατήσει μόνο τις νέες εγγραφές. Μετά, περνάς το set αυτό σε ένα CSV.

Εάν οι εγγραφές σου αποτελούνται από πολλά πεδία, μπορείς να ορίσεις εσύ μία κλάση “Records” και να υλοποιήσεις τις magic methods που χρησιμοποιεί το set. Χωρίς να το έχω ψάξει, εικάζω πως θα χρησιμοποιεί την `__eq__`.

Εάν μία εγγραφή είναι κάτι απλό, τότε και απλά strings θα κάνουν δουλειά. Εάν μία εγγραφή στηρίζεται μόνο σε ένα πεδίο, π.χ. ID, τότε κάνε το set μόνο με τα IDs και πρόσθεσε στο set μόνο τα εισερχόμενα IDs. 

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

Δημοσ. (επεξεργασμένο)

Μιας και πιάσαμε την Python

import pandas as pd
import openpyxl

df_source = pd.read_excel("C:\\Temp\Book1.xlsx")
df_csv = pd.read_csv("C:\\Temp\Book2.csv")
df_result =pd.concat([df_source,df_csv]).drop_duplicates(['ID'], keep='last').sort_values(by=['ID']).reset_index(drop=True)
df_result.to_excel("C:\\Temp\Final.xlsx")

και για να μην μπλέκουμε με θεωρητικές εικασίες ... :)

Επεξ/σία από masteripper
  • Like 3
Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

Δημιουργήστε ένα λογαριασμό ή συνδεθείτε για να σχολιάσετε

Πρέπει να είστε μέλος για να αφήσετε σχόλιο

Δημιουργία λογαριασμού

Εγγραφείτε με νέο λογαριασμό στην κοινότητα μας. Είναι πανεύκολο!

Δημιουργία νέου λογαριασμού

Σύνδεση

Έχετε ήδη λογαριασμό; Συνδεθείτε εδώ.

Συνδεθείτε τώρα
  • Δημιουργία νέου...