Python poskytuje vestavěné funkce pro vytváření, zápis a čtení souborů. Existují dva typy souborů, se kterými lze pracovat v pythonu, normální textové soubory a binární soubory (napsané v binárním jazyce, 0s a 1s).
- Textové soubory: V tomto typu souboru je každý řádek textu zakončen speciálním znakem zvaným EOL (End of Line), což je ve výchozím nastavení nový znak řádku (‚
‘) v pythonu. Binární soubory: V tomto typu souboru neexistuje žádný ukončovací znak pro řádek a data jsou uložena po převedení do strojově srozumitelného binárního jazyka.
Poznámka: Chcete-li se dozvědět více o práci se soubory klikněte zde .
Obsah
Režim přístupu
Režimy přístupu řídí typ operací, které jsou možné s otevřeným souborem. Odkazuje na to, jak bude soubor použit po jeho otevření. Tyto režimy také definují umístění úchytu souboru v souboru. Handle souboru je jako kurzor, který určuje, odkud se mají data v souboru číst nebo zapisovat. Různé přístupové režimy pro čtení souboru jsou –
- Pouze zápis (‚w‘): Otevřete soubor pro zápis. U existujícího souboru jsou data zkrácena a přepsána. Rukojeť je umístěna na začátku pilníku. Vytvoří soubor, pokud soubor neexistuje. Write and Read (‚w+‘) : Otevřete soubor pro čtení a zápis. U existujícího souboru jsou data zkrácena a přepsána. Rukojeť je umístěna na začátku pilníku. Pouze připojit (‚a‘): Otevřete soubor pro zápis. Soubor je vytvořen, pokud neexistuje. Rukojeť je umístěna na konci pilníku. Zapisovaná data budou vložena na konec, za existující data.
Poznámka: Chcete-li se dozvědět více o režimu přístupu klikněte zde .
Otevření souboru
To se provádí pomocí funkce open(). Pro tuto funkci není třeba importovat žádný modul. Syntax:
File_object = open(r'File_Name', 'Access_Mode')>
Soubor by měl existovat ve stejném adresáři jako soubor programu python, jinak by měla být plná adresa souboru napsána na místo názvu souboru. Poznámka: Znak r je umístěn před název souboru, aby se zabránilo tomu, že znaky v řetězci názvu souboru budou považovány za speciální znaky. Pokud je například v adrese souboru emp, pak se považuje za znak tabulátoru a vyvolá se chyba neplatná adresa. R dělá řetězec raw, to znamená, že říká, že řetězec neobsahuje žádné speciální znaky. Znak r lze ignorovat, pokud je soubor ve stejném adresáři a adresa není umístěna.
Python3
# Open function to open the file 'MyFile1.txt'> # (same directory) in read mode and> file1>=> open>('MyFile.txt', 'w')> > # store its reference in the variable file1> # and 'MyFile2.txt' in D:Text in file2> file2>=> open>(r'D:TextMyFile2.txt', 'w>+>')> |
>
>
Zde je soubor1 vytvořen jako objekt pro MůjSoubor1 a soubor2 jako objekt pro MůjSoubor2.
Zavření souboru
funkce close() zavře soubor a uvolní místo v paměti získané tímto souborem. Používá se v době, kdy soubor již není potřeba nebo pokud má být otevřen v jiném režimu souboru. Syntax:
File_object.close()>
Python3
číslo na řetězec java
# Opening and Closing a file 'MyFile.txt'> # for object name file1.> file1>=> open>('MyFile.txt', 'w')> file1.close()> |
>
>
Zápis do souboru
Existují dva způsoby zápisu do souboru.
- write() : Vloží řetězec str1 na jeden řádek do textového souboru.
File_object.write(str1)>
- writelines() : U seznamu prvků řetězce je každý řetězec vložen do textového souboru. Používá se pro vložení více řetězců najednou.
File_object.writelines(L) for L = [str1, str2, str3]>
Poznámka: „ “ je považováno za speciální znak o dvou bajtech. Příklad:
Python3
# Python program to demonstrate> # writing to file> # Opening a file> file1>=> open>(>'myfile.txt'>,>'w'>)> L>=> ['This>is> Delhi
', 'This>is> Paris
', 'This>is> London
']> s>=> 'Hello
'> # Writing a string to file> file1.write(s)> # Writing multiple strings> # at a time> file1.writelines(L)> # Closing file> file1.close()> # Checking if the data is> # written to file or not> file1>=> open>(>'myfile.txt'>,>'r'>)> print>(file1.read())> file1.close()> |
přejmenování složky v linuxu
>
>
Výstup:
Hello This is Delhi This is Paris This is London>
Připojování k souboru
Když je soubor otevřen v režimu připojení, je úchyt umístěn na konci souboru. Zapisovaná data budou vložena na konec, za existující data. Podívejme se na níže uvedený příklad, abychom objasnili rozdíl mezi režimem zápisu a režimem připojení.
Python3
# Python program to illustrate> # Append vs write mode> file1>=> open>('myfile.txt', 'w')> L>=> ['This>is> Delhi
', 'This>is> Paris
', 'This>is> London
']> file1.writelines(L)> file1.close()> # Append-adds at last> file1>=> open>('myfile.txt', 'a')># append mode> file1.write('Today
')> file1.close()> file1>=> open>('myfile.txt', 'r')> print>('Output of Readlines after appending')> print>(file1.read())> print>()> file1.close()> # Write-Overwrites> file1>=> open>('myfile.txt', 'w')># write mode> file1.write('Tomorrow
')> file1.close()> file1>=> open>('myfile.txt', 'r')> print>('Output of Readlines after writing')> print>(file1.read())> print>()> file1.close()> |
>
>
Výstup:
Output of Readlines after appending This is Delhi This is Paris This is London Today Output of Readlines after writing Tomorrow>
S prohlášením
příkaz with v Pythonu se používá při zpracování výjimek, aby byl kód čistší a mnohem čitelnější. Zjednodušuje správu běžných zdrojů, jako jsou datové proudy souborů. Na rozdíl od výše uvedených implementací není potřeba volat file.close() při použití s příkazem. Samotný příkaz with zajišťuje řádné získání a uvolnění zdrojů. Syntax:
with open filename as file:>
Python3
# Program to show various ways to> # write data to a file using with statement> L>=> ['This>is> Delhi
', 'This>is> Paris
', 'This>is> London
']> # Writing to file> with>open>('myfile.txt', 'w') as file1:> ># Writing data to a file> >file1.write('Hello
')> >file1.writelines(L)> # Reading from file> with>open>('myfile.txt', 'r>+>') as file1:> ># Reading form a file> >print>(file1.read())> |
lev ve srovnání s tygrem
>
>
Výstup:
Hello This is Delhi This is Paris This is London>
Poznámka: Chcete-li se dozvědět více o prohlášení, klikněte sem.
použití pro prohlášení:
kroky:
Chcete-li zapisovat do souboru v Pythonu pomocí příkazu for, můžete postupovat takto:
Otevřete soubor pomocí funkce open() s příslušným režimem ('w' pro zápis).
Pomocí příkazu for opakujte data, která chcete zapsat do souboru.
K zápisu dat do souboru použijte metodu write() objektu souboru.
Zavřete soubor pomocí metody close() objektu souboru.
V tomto příkladu je soubor otevřen pro zápis pomocí příkazu with open(‚soubor.txt‘, ‚w‘) jako f. Data, která mají být zapsána, jsou uložena v seznamu nazývaném data. Příkaz for se používá k opakování každého řádku dat v seznamu. Příkaz f.write(line + ‘ ’) zapíše každý řádek dat do souboru se znakem nového řádku ( ) na konci. Nakonec se soubor automaticky zavře, když skončí blok with.
Python3
# Open the file for writing> with>open>(>'file.txt'>,>'w'>) as f:> ># Define the data to be written> >data>=> [>'This is the first line'>,>'This is the second line'>,>'This is the third line'>]> ># Use a for loop to write each line of data to the file> >for> line>in> data:> >f.write(line>+> '
'>)> ># Optionally, print the data as it is written to the file> >print>(line)> # The file is automatically closed when the 'with' block ends> |
>
>Výstup
This is the first line This is the second line This is the third line>
Přístup:
Kód otevře soubor s názvem file.txt v režimu zápisu pomocí bloku with, aby bylo zajištěno, že soubor je po skončení bloku správně uzavřen. Definuje seznam řetězců nazývaných data, které představují řádky, které mají být zapsány do souboru. Kód pak používá cyklus for k iteraci každého řetězce v datech a zapisuje každý řetězec do souboru pomocí metody write(). Kód ke každému řetězci připojí znak nového řádku, aby bylo zajištěno, že každý řetězec bude zapsán na nový řádek v souboru. Kód volitelně vytiskne každý řetězec při zápisu do souboru.
Časová náročnost:
Původní kód i alternativní kód mají časovou složitost O(n), kde n je počet řádků, které mají být zapsány do souboru. Je to proto, že oba kódy potřebují iterovat každý řádek v seznamu dat, aby jej zapsaly do souboru.
Prostorová složitost:
Původní kód a alternativní kód mají stejnou prostorovou složitost O(n), kde n je počet řádků, které mají být zapsány do souboru. Oba kódy totiž potřebují vytvořit seznam řetězců, které představují řádky, které mají být zapsány do souboru.