Jak zacházet se soubory v Pythonu

V každém programovacím jazyce je manipulace se soubory důležitým aspektem. A Python také podporuje práci se soubory v různých režimech – jako je čtení a zápis do souborů a další.

Na konci tohoto tutoriálu budete schopni:

  • otevírat a číst soubory v Pythonu,
  • číst řádky z textového souboru,
  • zapisovat a připojovat k souborům a
  • používat kontextové manažery pro práci se soubory v Pythonu.

Jak číst soubor v Pythonu

Chcete-li otevřít soubor v Pythonu, můžete použít obecnou syntaxi: open(‚file_name‘,’mode‘).

  • Název_souboru je zde název souboru.

Poznámka: Pokud je soubor, který chcete otevřít, v aktuálním pracovním adresáři, můžete uvést pouze název souboru. Pokud je v jiné složce ve vašem pracovním prostředí, měli byste uvést cestu k souboru.

  • Parametr režim určuje režim, ve kterém chcete soubor otevřít.

Výchozí režim pro otevírání souboru je čtení – označený písmenem „r“. Doporučuje se však režim explicitně specifikovat.

Než začneme, podívejme se na soubor lib.txt, který použijeme v tomto příkladu.

📁 Stáhněte si textový soubor a kód použitý v tomto tutoriálu z toto úložiště GitHub.

Níže uvedený fragment kódu ukazuje, jak můžete otevřít textový soubor ‚lib.txt‘ v Pythonu pomocí funkce open() a přečíst jeho obsah.

file = open('lib.txt','r')
contents = file.read()
print(contents)
file.close()


# Output
Hello, there!
Here are a few helpful Python libraries:
1) NumPy
2) pandas
3) matplotlib
4) seaborn
5) scikit-learn
6) BeautifulSoup
7) Scrapy
8) nltk
9) Bokeh
10) statsmodels

Ve výše uvedeném příkladu

  • Funkce open() vrací objekt souboru a my se rozhodneme jej nazvat soubor.
  • Dále zavoláme metodu read() na soubor.
  • Proměnná content nyní obsahuje obsah souboru. A vytiskneme to.
  • Nakonec soubor zavřeme.
  Pokud dostanete telefonát ohledně vakcíny proti koronaviru, je to podvod

Pokud však zapomenete soubor zavřít, může dojít k plýtvání zdroji. Pokud pracujete s velkým počtem takových souborů, může dojít k značnému využití paměti. Je to proto, že jste otevřeli několik souborů, ale žádný z nich jste nezavřeli.

Nyní se naučíme lepší způsob otevírání souborů pomocí kontextové manažery. Níže uvedený fragment kódu ukazuje, jak je můžete použít.

with open('lib.txt','r') as f:
  contents = f.read()
  print(contents)

Při práci se soubory pomocí správců kontaktů nemusíte používat metodu close(). Po dokončení I/O operace se soubory automaticky zavřou.

Jak číst řádky ze souboru v Pythonu

V našem ukázkovém textovém souboru jsme měli jen pár řádků. Takže čtení celého obsahu souboru najednou nebyl problém.

Pokud však potřebujete číst velké soubory, použití metody read(), jak je uvedeno výše, nemusí být příliš efektivní.

Ve skutečnosti, pokud je textový soubor velmi velké velikosti, může vám brzy dojít paměť. Proto možná budete chtít číst řádky pouze pro čtení z textového souboru a v této části se dozvíte, jak to udělat.

Použití metody readline() Pythonu ke čtení řádků ze souboru

Metoda readline() čte ze souboru jeden řádek po druhém.

Spusťte následující fragment kódu.

with open('lib.txt','r') as f:
  line = f.readline()
  print(line)
  line = f.readline()
  print(line)


# Output
Hello, there!

Here are a few helpful Python libraries:

Můžete vidět, že po prvním volání metody readline() se vytiskne první řádek v souboru. A druhé volání metody readline() vrátí druhý řádek v souboru.

Je to proto, že po prvním volání metody je ukazatel souboru na začátku druhého řádku.

V Pythonu můžete pomocí metody tell() získat aktuální umístění ukazatele souboru. A k přesunutí ukazatele souboru na konkrétní místo můžete použít metodu seek().

Ve fragmentu kódu níže používáme f.seek(0) po prvním volání metody. Tím se přesune ukazatel souboru na začátek textového souboru. Proto se v obou případech vytiskne první řádek v souboru.

with open('lib.txt','r') as f:
  line = f.readline()
  print(line)
  f.seek(0)
  line = f.readline()
  print(line)


# Output
Hello, there!

Hello, there!

Použití metody readlines() Pythonu ke čtení řádků ze souboru

Existuje další úzce související metoda nazvaná readlines().

  Blogger vs. WordPress: Co je nejlepší pro blogování?

Když spustíte následující fragment kódu, uvidíte, že metoda readlines() vrací seznam všech řádků v souboru.

with open('lib.txt','r') as f:
  lines = f.readlines()
  print(lines)


# Output
['Hello, there!n', 'Here are a few helpful Python libraries:n', 
'1) NumPyn', '2) pandasn', '3) matplotlibn', 
'4) seabornn', '5) scikit-learnn', '6) BeautifulSoupn', 
'7) Scrapyn', '8) nltkn', '9) Bokehn', '10) statsmodelsn', 'n']

Použití Pythonu pro smyčku ke čtení řádků ze souboru

Chcete-li číst řádky z textového souboru, můžete také použít cyklus for.

Jakmile budete mít souborový objekt, můžete použít smyčku for k iteraci obsahu souboru – jeden řádek po druhém a vytisknout je, jak je znázorněno níže. Všimněte si, že přistupujeme vždy pouze k jednomu řádku a nečteme obsah celého souboru.

with open('lib.txt','r') as f:
  for line in f:
    print(line, end='')

Poznámka: Při použití funkce print() Pythonu je výchozím oddělovačem znak nový řádek – znak ‚n‘. Ale v původním souboru tyto nové řádky nemáme. Nastavte tedy argument oddělovače na prázdný řetězec: end = ”, aby se obsah souboru vytiskl tak, jak je.

Jak číst kusy obsahu ze souboru v Pythonu

V Pythonu si můžete také vybrat, že budete obsah souboru číst po malých částech.

Přečtěte si níže uvedený kód:

  • Zde nastavíme chunk_size na 50. To znamená, že se načte prvních 50 znaků v souboru a také je vytiskneme.
  • Nyní zavolejte metodu tell() na souborový objekt f. Můžete vidět, že ukazatel souboru je nyní na pozici 51 – což je podle očekávání.
chunk_size = 50
with open('lib.txt','r') as f:
  chunk = f.read(chunk_size)
  print(chunk)
  current = f.tell()
  print(f"Current position of file pointer: {current}")

# Output
Hello, there!
Here are a few helpful Python librar
Current position of file pointer: 51

Tuto techniku ​​můžete také použít ke čtení celého souboru v podobě malých částí.

  Jak změnit ovládání detekce uší a dotyku na AirPodu

Následující fragment kódu ukazuje, jak to můžete udělat.

chunk_size = 50
with open('lib.txt','r') as f:
  chunk = f.read(chunk_size)
  print(chunk,end='')

  while(len(chunk)>0):
    chunk = f.read(chunk_size)
    print(chunk,end='')

# Output
Hello, there!
Here are a few helpful Python libraries:
1) NumPy
2) pandas
3) matplotlib
4) seaborn
5) scikit-learn
6) BeautifulSoup
7) Scrapy
8) nltk
9) Bokeh
10) statsmodels

Zde používáme smyčku while ke čtení obsahu souboru. Čteme obsah souboru v bloku velikosti 50, dokud nedosáhneme konce souboru. ✅

Jak zapisovat do souboru v Pythonu

Abyste mohli zapisovat do textového souboru v Pythonu, měli byste jej otevřít v režimu zápisu – specifikovat ‚w‘.

Níže uvedený fragment kódu ukazuje, jak na to.

with open('new_file.txt','w') as f:
  f.write('Hello, Python!')

Uvidíte, že ve vašem pracovním adresáři byl vytvořen ‚new_file.txt‘.

Nyní spusťte výše uvedenou buňku kódu znovu.

Ve svém terminálu spusťte následující příkaz:

cat new_file.txt

# Output: Hello, Python!

V ideálním případě jsme do souboru zapisovali dvakrát. Takže Ahoj, Pythone! měl být vytištěn dvakrát, ano?

Ale uvidíte, že to bylo vytištěno pouze jednou. Je to proto, že když otevřete soubor v režimu zápisu (w), v podstatě přepíšete obsah souboru novým obsahem.

Pokud chcete přidat na konec souboru, aniž byste přepsali existující obsah, měli byste soubor otevřít v režimu připojení. A jak to udělat, uvidíte v další části.

Jak připojit k souboru v Pythonu

Pokud chcete k souboru připojit obsah – bez přepsání, otevřete jej v režimu připojení.

Chcete-li to provést, použijte `’a’—a pro připojení—a explicitně specifikujte režim.

Dále spusťte následující buňku kódu dvakrát.

with open('new_file.txt','a') as f:
  f.write('Hello, Python!')

Všimněte si, jak je text nyní vytištěn dvakrát, jak jsme připojili k souboru.

cat new_file.txt

# Output: Hello, Python!Hello, Python!

Závěr

Pojďme rychle shrnout, co jsme v tomto tutoriálu probrali.

  • Naučili jste se běžné I/O operace se soubory, jako je čtení, zápis a připojení k souboru.
  • Kromě toho jste se také naučili, jak používat metodu seek() k přesunutí ukazatele souboru na konkrétní pozici a
  • jak použít metodu tell() k načtení aktuální pozice ukazatele souboru.

Doufám, že vám tento návod pomohl. Nyní, když jste se naučili pracovat s textovými soubory v Pythonu, zjistěte, jak pracovat se soubory JSON v Pythonu.

Příbuzný:

Zkontrolujte délku seznamu v Pythonu ve 3 krocích.