Ogromne plik danych plain-text
czytam ogromny plik na kawałki przy użyciu Pythona. Następnie stosuję wyrażenie regularne w tym kawałku. Na podstawie znacznika identyfikatora chcę wyodrębnić odpowiednią wartość. Ze względu na wielkość porcji brakuje danych na granicach porcji.Python: regex mecz w poprzek granic plików fragmentach
Wymagania:
- Plik musi być odczytywane w kawałkach.
- Wielkość porcji musi być mniejsza niż lub równa 1 GiB.
przykład kodu Pythona
identifier_pattern = re.compile(r'Identifier: (.*?)\n')
with open('huge_file', 'r') as f:
data_chunk = f.read(1024*1024*1024)
m = re.findall(identifier_pattern, data_chunk)
przykłady danych Fragment
Dobre: liczba znaczników równoważne liczby wartości
Identyfikator: wartość
Identyfikator: wartość
Identyfikator: wartość
Identyfikator: wartość
Ze względu na wielkość porcji, można się różnych problemów brzegowych, jak wymienione poniżej. Trzeci identyfikator zwraca niepełną wartość, "v" zamiast "wartość". Następny fragment zawiera "alue". Powoduje to brak danych po analizie.
Źle: wartość identyfikatora niekompletne
Identyfikator: wartość
Identyfikator: wartość
Identyfikator: v
Jak rozwiązać problemy brzegowe kawałek takiego?
Może znajdziesz swoją odpowiedź tutaj: [Python strumień regex parse] (https://stackoverflow.com/questions/4634376/python-regex-parse-stream) –
Również tutaj: [wyrażenie regularne na potoku zamiast ciąg znaków?] (https://stackoverflow.com/questions/13004359/regular-expression-on-in-instead-of-string) –
Ponieważ twój wzór pojawia się na granicy linii, może mógłbyś po prostu czytać linię na raz i dopasowywanie na linii zamiast porcji. – Himanshu