Mam plik (pozwala zadzwonić do tego plik_a), z którego wyodrębniam 5 linii (jak więc)

 pppppppp
 qqqqqqqq
 rrrrrrrr
 ssssssss
 tttttttt

Teraz chcę wstawić te pięć linii na początku 10 innych plików (pozwala na nich zadzwonić 1..10).

Chcę otworzyć File_a (jeden z liniami 5), a następnie otwórz jeden za pomocą jednego 10 plików i włóż te linie na początku tych plików.

W tej chwili wykonuję następujące czynności:

1) Open File_a, wyciągnij pierwszy z pięciu linii (PPPPPPPP) Zapisz do nowego pliku
2) Następnie druga linia .... Ja.
3) Otwórz plik 1 i skopiuj wszystkie linie, a następnie napisz do nowego pliku otwartego w kroku 1
4) Zamknij wszystkie pliki ... ..repeat

Skończę więc z 10 nowymi plikami, abym raczej przechowywać 5 linii wyodrębnionych do istniejącego pliku, a także uniknąć otwierania i zamykania file_a 10times!

Jakie narzędzie mogę używać do przechowywania 5 linii w pamięci podczas robienia tego bez ich zniekształcania?

Dziękuję Ci

0
user3456863 16 sierpień 2014, 01:00

2 odpowiedzi

Najlepsza odpowiedź

Umieść pliki na liście i iteruj na liście:

    file_list = ["foo.txt","bar.txt"...]
    with open("file_A.txt","r+") as f: # open once
        # extract lines
        extracted = [] # put data here
        for f in file_list:
            with open(f, "r+") as out:
                lines = out.readlines()
                lines[0:0] = extracted # add data at start 
                out.seek(0)
                out.write("".join(lines)) # write new data
0
Padraic Cunningham 15 sierpień 2014, 21:21

Nie jestem pewien, czy potrzebujesz danych ponownie napisanych na miejscu, ale jeśli nie, możesz użyć (nieświadomie):

from itertools import islice, chain

with open('filea.txt') as fin:
    first5 = list(islice(fin, 5)) # or whatever criteria to get the 5

for filename in ['file1.txt', 'file2.txt', 'file3.txt']: #etc
    with open(filename) as fin, open(filename + '.out') as fout:
        fout.writelines(chain(first5, fin))
0
Jon Clements 15 sierpień 2014, 21:11