Analiza dokumentów excel z openpyxl

Analiza dokumentów excel z openpyxl
Xederro
  • Rejestracja:około 6 lat
  • Ostatnio:ponad 4 lata
  • Postów:10
0

Witam potrzebuje przeanalizować kilkanaście plików .xlsx, używam do tego pythona i biblioteki openpyxl.

Kopiuj
import openpyxl
import time
while True:
    todo = os.listdir("C:\\sciezka\dozrobienia\\")
    if len(todo) != 0:
        excel = openpyxl.load_workbook('C:\\sciezka\\dozrobienia\\' + todo[0])
        excelws = excel.get_sheet_by_name('Sheet1')

#v chwilowo by sprawdzić czy działa
        f = open("notatki.txt", "a")
        f.write(todo[0] + '\n')
        for row in range(10,excelws.max_row):
            if excelws['B'+str(row)].value is not None:
                f.write(str(excelws['A'+str(row)].value)+str(excelws['B'+str(row)].value) + '\n')
        f.close()
#^chwilowo by sprawdzić czy działa

        excel.save("C:\\sciezka\\zakonczone\\" + todo[0])

    time.sleep(1)

Problem polega na tym, że jak użyje excel=openpyxl.load_workbook() dla pierwszego pliku, ten zostaje w pamięci i nie chce załadować pliku drugiego do czasu zresetowania programu

próbowałem użyć del excel, excel=None czy excel.close() nie działa niestety

edytowany 1x, ostatnio: Xederro
Shalom
  • Rejestracja:ponad 21 lat
  • Ostatnio:około 3 lata
  • Lokalizacja:Space: the final frontier
  • Postów:26433
0

excel = openpyxl.load_workbook('C:\\sciezka\\dozrobienia\\' + todo[0]) na oko ładujesz ten sam plik cały czas, stąd pewnie problem bo jakiś handle trzymasz a pewnie default to otwarcie read-write.


"Nie brookliński most, ale przemienić w jasny, nowy dzień najsmutniejszą noc - to jest dopiero coś!"
edytowany 1x, ostatnio: Shalom
Xederro
  • Rejestracja:około 6 lat
  • Ostatnio:ponad 4 lata
  • Postów:10
0
Shalom napisał(a):

na oko ładujesz ten sam plik cały czas

zapomniałem wkleić ale na końcu usuwa ten pierwszy plik z tej lokalizacji ponieważ został on przeniesiony więc todo[0] jest już inną wartością. Tak otwiera się w trybie read/write, nie wiem dlaczego ale po zmianie na samo read program zdaje się gdzieś zacinać ponieważ nic się nie dzieje (oczywiście excel.save() wtedy usuwam bo nie może zapisać)

YA
  • Rejestracja:prawie 10 lat
  • Ostatnio:około godziny
  • Postów:2370
0

Jak to todo[0] jest inną wartością? Z kodu to nie wynika. Skąd usuwasz z listy czy z dysku?

Xederro
  • Rejestracja:około 6 lat
  • Ostatnio:ponad 4 lata
  • Postów:10
0
yarel napisał(a):

Jak to todo[0] jest inną wartością? Z kodu to nie wynika. Skąd usuwasz z listy czy z dysku?

z dysku
os.remove('C:\\sciezka\\' + todo[0]) < tego brakuje

edytowany 1x, ostatnio: Xederro
YA
  • Rejestracja:prawie 10 lat
  • Ostatnio:około godziny
  • Postów:2370
0

Jak według Ciebie działa todo = os.listdir("C:\\sciezka\dozrobienia\\") ?

edycja:
Dobra, nie chce mi się krok po kroku :P Usuwasz z dysku, nie z listy, więc todo[0] zawszę będzie tym samym...

edytowany 1x, ostatnio: yarel
Xederro
  • Rejestracja:około 6 lat
  • Ostatnio:ponad 4 lata
  • Postów:10
0
yarel napisał(a):

Jak według Ciebie działa todo = os.listdir("C:\\sciezka\dozrobienia\\") ?

edycja:
Dobra, nie chce mi się krok po kroku :P Usuwasz z dysku, nie z listy, więc todo[0] zawszę będzie tym samym...

usuwam z dysku a potem zastępuje todo powtarzając todo = os.listdir("C:\\sciezka\dozrobienia\\")

YA
Moja nieuwaga :-)
Xederro
spokojnie każdemu się zdarza
YA
  • Rejestracja:prawie 10 lat
  • Ostatnio:około godziny
  • Postów:2370
1
  1. Możesz zmodyfikować przetwarzanie, tj. rozbić na 3 części: pobranie listy plików, przetworzenie, posprzątanie, dzięki temu:
  • będziesz generował ~50% mniej wywołań systemowych (listdir() tylko raz, a nie co plik)
  • zobaczysz czy pliki przetwarzają się poprawnie czy problem leży w usuwaniu (np. coś trzyma uchwyt)
  1. Pobierz https://docs.microsoft.com/en-us/sysinternals/downloads/handle i sprawdź czy uchwyt do tego pliku "pierwszego" mimo wszystko nie jest trzymany przez proces.

  2. Sprawdź wersję openpyxl - może są jakieś babole, w tej której używasz

Xederro
3) dzisiaj aktualizowałem by to obalić spróbuje
Xederro
Działa dziękuje
lion137
  • Rejestracja:około 8 lat
  • Ostatnio:2 minuty
  • Postów:4936
0

A nie lepiej użyć pandas ?


Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.