logo

Com obrir un fitxer amb la instrucció with

El amb La paraula clau a Python s'utilitza com a gestor de context. Com en qualsevol llenguatge de programació, l'ús de recursos com operacions de fitxers o connexions a bases de dades és molt comú. Però aquests recursos són limitats en l'oferta. Per tant, el principal problema rau a assegurar-se d'alliberar aquests recursos després de l'ús. Si no s'alliberen, es produirà una fuita de recursos i pot provocar que el sistema s'alentiri o s'enfonsi.

Com sabem, la funció open() s'utilitza generalment per a la gestió de fitxers a Python. Però és una pràctica estàndard utilitzar gestors de context com amb paraules clau per gestionar fitxers, ja que els alliberarà automàticament un cop s'hagi completat el seu ús.



Python amb open() Sintaxi:

Sintaxi:

amb open(file_path, mode, encoding) com a fitxer:



ruta_fitxer: És el camí al fitxer que cal obrir

mode: manera d'operar en el fitxer. ex.: llegir, escriure, etc. (representat per r, w, r+, w+, rb, wb, etc.)

codificació: llegiu el fitxer en el format de codificació correcte.



Exemple 1: Exemple senzill amb la instrucció amb

Ja tenim un nom de fitxer geeksforgeeks.txt al nostre sistema, i té les dades següents:

geeksforgeeks,txt

Ara obrirem el fitxer i llegirem el contingut del fitxer utilitzant la instrucció with open():

Python 3

funció lambda java




with>open>(>'geeksforgeeks.txt'>,>'r'>) as gfg_file:> >file_content>=> gfg_file.read()> >print>(file_content)>

>

>

Sortida:

GeeksForGeeks is best for DSA>

Nota: Aquí hem utilitzat el mode com r per llegir les dades, perquè el fitxer de destinació té dades de text. En cas que estem llegint algun fitxer binari, hem d'utilitzar rb com la modalitat.

Exemple 2: També podem utilitzar el amb declaració per afegir o escriure dades al fitxer.

Adjuntarem la cadena Hola frikis! al nostre fitxer geeksforgeeks.txt.

Python 3




paràmetres predeterminats de java
# appending string to file> with>open>(>'geeksforgeeks.txt'>,>'a'>) as gfg_file:> >gfg_file.write(>' Hello Geeks!'>)> > # reading the file contents> # to verify if successfully appended the data> with>open>(>'geeksforgeeks.txt'>,>'r'>) as gfg_file:> >content>=> gfg_file.read()> >print>(content)>

>

>

Sortida:

GeeksForGeeks is best for DSA Hello Geeks!>

Nota: Aquí hem utilitzat a com a manera d'obrir el fitxer, això és perquè volem afegir les dades del fitxer. En lloc d'això, si volguéssim sobreescriure les dades del fitxer, utilitzaríem el En mode.

Exemple 3: ús de la instrucció imbricada amb open per obrir diversos fitxers

Com obrir un fitxer amb la instrucció with

enllaços.txt

Hem definit a enllaços.txt fitxer que conté alguns enllaços aleatoris. Obrirem el geeksforgeeks.txt fitxer esmentat anteriorment i afegiu el contingut del fitxer d'enllaços al fitxer geeksforgeeks.txt dossier.

Python 3




# appending string to file> with>open>(>'geeksforgeeks.txt'>,>'a'>) as gfg_file:> >gfg_file.write(>' Hello Geeks!'>)> >with>open>(>'links.txt'>,>'r'>) as links_file:> >lines>=> links_file.readlines()> >gfg_file.writelines(lines)>

>

>

geeksforgeeks.txt contingut del fitxer després de la modificació:

Com obrir un fitxer amb la instrucció with

geeksforgeeks,txt

Aquí, podem veure que el contingut del enllaços.txt s'ha afegit el fitxer geeksforgeeks.txt fitxer després d'executar l'script.

Diferència d'utilitzar open() vs amb open()

Encara que la funció d'utilitzar obert() i amb obert() és exactament el mateix, però hi ha algunes diferències importants:

  • Utilitzant open() podem utilitzar el controlador de fitxers sempre que el fitxer no s'hagi tancat explícitament file_handler.close() , però en cas d'utilitzar amb el gestor de context open(), no podem utilitzar un gestor de fitxers fora del bloc with. S'aixecarà ValueError: operació d'E/S en un fitxer tancat en aquest cas.
  • Quan utilitzem open() hem de tancar explícitament una instància de fitxer oberta, en cas contrari, altres parts del codi poden tenir errors en obrir el mateix fitxer. Amb open() el tancament del fitxer és gestionat pel gestor de context.
  • L'ús de la instrucció de context amb open() fa que el codi sigui més ordenat, ja que podem separar fàcilment entre blocs de codi per diferència de sagnats. En cas d'open(), és possible que ens perdem tancar la instància del fitxer, això pot provocar fuites de memòria i altres errors d'operació d'E/S.