Dodawanie do pliku w określonym miejscu

0

Mam plik w formacie NEXUS i chciałbym dodać do niego w określonym miejscu nowy blok. Tak wygląda ten plik:

#NEXUS
begin data;
    dimensions ntax=2 nchar=633;
    format datatype=dna missing=? gap=-;
matrix
22814 CATG---GACAGAGCGACCCGCG--CACGTTACAAACACTACGCGGGGTGGCCCCGGCTGCCTCGCGCGGAGGTGCTG---CT
11246 CATG---GACAGAGCGACCCGCGAACACGTTACAAACACTACGCGGGGTGGCCCCGGCTGCCTCGC--GGAGGTGCTG--GCT
;
end;

Chciałbym teraz przed znakiem ";" dodać ten fragment:

22814 0 0 1 0 0
11246 0 1 0 0 1

I ostatecznie dostać:

#NEXUS
begin data;
    dimensions ntax=2 nchar=633;
    format datatype=dna missing=? gap=-;
matrix
22814 CATG---GACAGAGCGACCCGCG--CACGTTACAAACACTACGCGGGGTGGCCCCGGCTGCCTCGCGCGGAGGTGCTG---CT
11246 CATG---GACAGAGCGACCCGCGAACACGTTACAAACACTACGCGGGGTGGCCCCGGCTGCCTCGC--GGAGGTGCTG--GCT
22814 0 0 1 0 0
11246 0 1 0 0 1
;
end;

Próbowałem zrobić to w ten sposób:

for x in ad:
    with open("nex.nexus", "a") as myfile:
        myfile.write("\n" + str(x))

Ale dodaje wtedy na końcu pliku. Nie wiem jak dodać to w określonym miejscu.

2

Możesz zmienić pozycję w pliku, ale to raczej słaby pomysł, bo w ogólnym przypadku pewnie nie będzie znał dokładnej pozycji.

Ja bym otworzył ten plik do odczytu, drugi do zapisu i przepisywał linijka po linijce, a jak trafi na ten średnik to niech dopisze jeszcze te dwie linijki.

0

Ja proponuję inne rozwiązanie (nie znam Pythona, ale w każdej technologii programowania powinno to być możliwe, bo to są podstawy):

  1. Otworzyć plik jako tekstowy lub binarny z możliwością zapisu.
  2. Odczytywać plik aż znajdzie \n;\n lub \r\n;\r\n (średnik między dwoma znakami końca linii), zapamiętać pozycję wskaźnika pliku jako I.
  3. Odczytać pozostały tekst i zapamiętać go w zmiennej Temp.
  4. Przesunąć wskaźnik pliku do miejsca I-2 (wskaźnik powinien stać na średniku), jeżeli znaleziono \r\n;\r\n, to I-3.
  5. Zapisać dodatkowy tekst do pliku.
  6. Zapisać ;\n do pliku.
  7. Zapisać tekst ze zmiennej Temp do pliku.
  8. Zamknąć plik.

1 użytkowników online, w tym zalogowanych: 0, gości: 1