• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Dopisanie kilku wierszy tekstu na początku pliku

Object Storage Arubacloud
+1 głos
263 wizyt
pytanie zadane 11 maja 2021 w Python przez osobliwy nick Użytkownik (900 p.)
edycja 11 maja 2021 przez osobliwy nick

Jak dopisać kilka wierszy tekstu na początku, do bardzo dużego pliku tekstowego, który już mam? Próbowałem otwierać to w trybie "a", ale on dopisuje zawsze na końcu. Próbowałem przesunąć znacznik na początek plik.seek(0). To też nic nie daje, dopisuje się zawsze na końcu.

Szukam teraz metody łączenia dwóch plików, bo zaczynam podejrzewać, że tego nie da się zrobić po prostu otwierając plik i coś w nim dopisując. Ale nie znalazłem żadnych zrozumiałych metod.

plik = open(r"C:\Users\48791\Desktop\test.txt", 'a')
plik.seek(0)
plik.write("coś")
plik.write("\n")
plik.write("następnecoś")

Domyślam się, że można utworzyć plik i dopisać do niego wiersze mojego dużego pliku, czytając je po kolei. Plik ma jednak 5120000000, w których są zapisane liczby 32-bitowych. Obawiam się, że przepisywanie potrwa długo. Nie chce mi się czekać, ostatecznie jednak to zrobię.

komentarz 11 maja 2021 przez edutomek Dyskutant (8,380 p.)
edycja 11 maja 2021 przez edutomek

Tak na szybko: a musi to być robione w Pythonie? Bo jeśli np. działasz pod Linuksem, to dopisanie treści na początku pliku robi się jednym poleceniem `sed`:

sed -i '1s/^/task goes here\n/' todo.txt

Nie sprawdzałem polecenia, na szybko w sieci znalazłem gotowca.

Do Pythona znalazłem coś takiego:

https://stackoverflow.com/questions/5914627/prepend-line-to-beginning-of-a-file

Edit: wychodzi na to, że nie ma dobrego sposobu, aby to zrobić szybko dla wielkich plików. Nawet sed tworzy pliki tymczasowe.

1 odpowiedź

0 głosów
odpowiedź 11 maja 2021 przez osobliwy nick Użytkownik (900 p.)
Mam aplikację Ubuntu na Windowsa, powinna zadziałać.
komentarz 11 maja 2021 przez osobliwy nick Użytkownik (900 p.)

Jednak udało się to zrobić w ten sposób:

filenames = ['file1.txt', 'file2.txt', ...]
with open('path/to/output/file', 'w') as outfile:
    for fname in filenames:
        with open(fname) as infile:
            for line in infile:
                outfile.write(line)

https://stackoverflow.com/questions/5914627/prepend-line-to-beginning-of-a-file

Podobne pytania

0 głosów
1 odpowiedź 287 wizyt
pytanie zadane 13 lutego 2020 w C i C++ przez Damianek Obywatel (1,020 p.)
0 głosów
0 odpowiedzi 1,545 wizyt
0 głosów
2 odpowiedzi 704 wizyt
pytanie zadane 3 września 2020 w Python przez osobliwy nick Użytkownik (900 p.)

92,576 zapytań

141,426 odpowiedzi

319,651 komentarzy

61,961 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...