Jestem całkiem nowym użytkownikiem Pythona i programowania w ogóle, ale próbuję uruchomić obliczenia "przesuwania okna" nad plikiem .txt rozdzielonym tabulatorami, który zawiera około 7 milionów linii z pytonem . Przez przesuwanie okna rozumiem, że wykona on obliczenia, powiedzmy 50 000 linii, zgłoś liczbę, a następnie przesuń w górę, powiedz 10 000 linii i wykonaj te same obliczenia w porównaniu z kolejnymi 50 000 linii. Mam obliczenia i "przesuwne okno" działające poprawnie i działa dobrze, jeśli testuję je na małym podzbiorze moich danych. Jednak jeśli spróbuję uruchomić program w całym zestawie danych, jest on niesamowicie wolny (miałem go uruchomionych przez około 40 godzin). Matematyka jest dość prosta, więc nie sądzę, że powinno to potrwać tak długo.Przetwarzanie dużego pliku .txt w pytonie efektywnie
Sposób w jaki teraz czytam plik .txt jest w module csv.DictReader. Mój kod wygląda następująco:
file1='/Users/Shared/SmallSetbee.txt'
newfile=open(file1, 'rb')
reader=csv.DictReader((line.replace('\0','') for line in newfile), delimiter="\t")
wierzę, że to czyni słownika Spośród wszystkich 7 milionów wierszy na raz, co myślę, że może być przyczyną tego, że spowalnia tyle dla większego pliku.
Ponieważ interesuje mnie tylko wykonywanie obliczeń przez "porcje" lub "okna" danych na raz, czy istnieje skuteczniejszy sposób czytania tylko w określonych wierszach na raz, wykonanie obliczeń, a następnie powtórzenie z nowy określony "porcja" lub "okno" określonych linii?
Nie tworzy to słownika wszystkich linii naraz. Tworzy słownik dla każdej linii. Oznacza to, że opublikowany fragment nie jest przyczyną problemów z wydajnością. Być może mógłbyś nam pokazać więcej kodu? –
Podejrzewam, że jeśli robisz obliczenia na dużych zestawach danych podobnych do tabel, możesz zajrzeć do Pand: http://pandas.pydata.org/pandas-docs/dev/io.html#iterating-through- files-chunk-by-chunk Wszystko, co próbujesz zrobić, zostało prawdopodobnie zrobione przed 1000 razy lepszym. – Iguananaut
Te obliczenia wykonasz w 696 "oknach". Ile czasu zajmuje jedno okno na pliku linii 50k? –