2010-10-19 7 views
5

Witam Szukam, aby zaimplementować własny niestandardowy plik podobny do obiektu do wewnętrznego formatu binarnego, którego używamy w pracy (nie chcę zbytnio wchodzić w szczegóły, ponieważ nie wiem, czy potrafię). Próbuję pójść na bardziej pytonowy sposób robienia rzeczy, ponieważ obecnie mamy dwie funkcje odczytu/zapisu (każda ~ 4k linii kodu), które robią wszystko. Jednak potrzebujemy większej kontroli/finezji, stąd fakt, że ja przepisuję te rzeczy.Tworzenie niestandardowego pliku, na przykład podpowiedzi python obiektu?

spojrzałem na dokumentacji Pythona i mówią, jakie metody i trzeba realizować, ale nie wspominają rzeczy jak iter()/itp

Zasadniczo co chcielibyśmy zrobić, to rzeczy tak :

output_file_objs = [ 
    open("blah.txt", "w") 
    open("blah142.txt", "wb") 
    my_lib.open("internal_file.something", "wb", ignore_something=True) 
] 

data_to_write = <data> 

for f in output_file_objs: 
    f.write(data_to_write) 

Mogę więc połączyć to z innymi i zasadniczo mam poziom przejrzystości. Dodam do tego niestandardowe metody, ale nie stanowi to problemu.

Czy istnieje jakaś referencja dotycząca pisania własnego niestandardowego pliku, takiego jak obiekty? Jak każda forma ograniczeń lub specjalnych metod (iter). Powinienem wprowadzić?

Czy istnieje dobry przykład jednego z wewnątrz standardowej biblioteki Pythona, na które mogę patrzeć?

Odpowiedz

4

To, co składa się na "plikopodobny", zależy w rzeczywistości od tego, do czego zamierza się go używać; nie wszystkie metody są wymagane, aby zostać wdrożone (lub mieć rozsądną implementację).

Po tym wszystkim, dokumentacje file i iterator są tym, czego potrzebujesz.

+1

Dzięki temu zaimplementowałem szorstki szkielet i wydaje mi się, że działa świetnie. – UberJumper

0

Po co pakować dane w StringIO? W przeciwnym razie możesz przejrzeć dokumentację i wdrożyć wszystkie podobne do plików metody. Prawdę mówiąc, w Pythonie nie ma prawdziwych interfejsów, a niektóre funkcje (jak tell()) mogą nie mieć sensu dla twoich plików, więc możesz pozostawić je niezaimplementowane.

+0

Jest dużo bardziej skomplikowana niż StringIO, musimy zrobić coś takiego jak kompresja, aktualizując inne pliki, gdy utworzono udany pakiet binarny. – UberJumper

Powiązane problemy