Hur man hanterar filer i Python

I alla programmeringsspråk är filhantering en viktig aspekt. Och Python stöder också arbete med filer i olika lägen – som att läsa och skriva till filer och mer.

I slutet av den här handledningen kommer du att kunna:

  • öppna och läs filer i Python,
  • läsa rader från en textfil,
  • skriva och lägga till filer, och
  • använd sammanhangshanterare för att arbeta med filer i Python.

Hur man läser fil i Python

För att öppna en fil i Python kan du använda den allmänna syntaxen: open(’filnamn’,’läge’).

  • Här är filnamn namnet på filen.

Obs: Om filen som du vill öppna finns i den aktuella arbetskatalogen kan du bara nämna filens namn. Om det finns i en annan mapp i din arbetsmiljö bör du inkludera sökvägen till filen.

  • Parameterläget anger i vilket läge du vill öppna filen.

Standardläget för att öppna en fil läses—betecknas med bokstaven ’r’. Det är dock en rekommenderad praxis att ange läget explicit.

Innan vi börjar, låt oss ta en titt på filen lib.txt, som vi kommer att använda i det här exemplet.

📁 Ladda ner textfilen och koden som används i denna handledning från denna GitHub-repo.

Kodavsnittet nedan visar hur du kan öppna en textfil ’lib.txt’ i Python med funktionen open() och läsa dess innehåll.

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

I exemplet ovan,

  • Open()-funktionen returnerar ett filobjekt, och vi väljer att kalla det för fil.
  • Därefter anropar vi read()-metoden på filen.
  • Variabeln innehåll innehåller nu filens innehåll. Och vi skriver ut det.
  • Slutligen stänger vi filen.

Men om du glömmer att stänga filen kommer det att finnas ett eventuellt slöseri med resurser. Om du arbetar med ett stort antal sådana filer kan det bli betydande minnesanvändning. Detta beror på att du har öppnat flera filer men inte stängt någon av dem.

Låt oss nu lära oss ett bättre sätt att öppna filer med sammanhangshanterare. Kodavsnittet nedan visar hur du kan använda dem.

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

När du använder kontakthanterare för att arbeta med filer behöver du inte använda metoden close(). Filerna stängs automatiskt efter att I/O-operationen är klar.

Hur man läser rader från fil i Python

I vår exempeltextfil hade vi bara några rader. Så att läsa in allt filinnehåll på en gång var inget problem.

Men när du behöver läsa in stora filer kanske det inte är särskilt effektivt att använda read()-metoden, som visas ovan.

Faktum är att om textfilen är av mycket stor storlek kan du snart få slut på minne. Det är därför du kanske vill läsa i skrivskyddade rader från en textfil, och du kommer att lära dig hur du gör detta i det här avsnittet.

Använder Pythons readline()-metod för att läsa rader från fil

Metoden readline() läser en rad i taget från filen.

Kör följande kodavsnitt.

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:

Du kan se att efter det första readline()-metodanropet skrivs den första raden i filen ut. Och det andra anropet till metoden readline() returnerar den andra raden i filen.

Detta beror på att filpekaren är i början av den andra raden efter det första metodanropet.

I Python kan du använda metoden tell() för att få den aktuella platsen för filpekaren. Och för att flytta filpekaren till en specifik plats kan du använda metoden seek().

I kodavsnittet nedan använder vi f.seek(0) efter det första metodanropet. Detta flyttar filpekaren till början av textfilen. Det är därför, båda gångerna, den första raden i filen skrivs ut.

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!

Använder Pythons readlines()-metod för att läsa rader från fil

Det finns en annan närbesläktad metod som kallas readlines().

När du kör följande kodavsnitt ser du att metoden readlines() returnerar en lista över alla rader i filen.

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']

Använder Python’s for Loop för att läsa rader från fil

För att läsa in raderna från en textfil kan du också använda for-loopen.

När du väl har ett filobjekt kan du använda for loop för att iterera genom innehållet i filen—en rad i taget och skriva ut dem, som visas nedan. Lägg märke till hur vi bara kommer åt en rad åt gången och inte läser in hela filens innehåll.

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

Obs: När du använder Pythons print()-funktion är standardavgränsaren ett nyrad-’n’-tecken. Men i originalfilen har vi inte dessa nya rader. Så ställ in separatorargumentet till en tom sträng: end = ” för att skriva ut innehållet i filen som det är.

Hur man läser delar av innehåll från fil i Python

I Python kan du även välja att läsa in innehållet i filen i form av små bitar.

Läs igenom koden nedan:

  • Här sätter vi chunk_size till 50. Det betyder att de första 50 tecknen i filen kommer att läsas in, och vi skriver även ut dem.
  • Anropa nu tell()-metoden på filobjektet f. Du kan se att filpekaren nu är på position 51— vilket är som förväntat.
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

Du kan också använda den här tekniken för att läsa in hela filen i form av små bitar.

Följande kodavsnitt visar hur du kan göra detta.

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

Här använder vi en while-loop för att läsa innehållet i filen. Vi läser in filens innehåll i en bit av storlek 50 tills vi når slutet av filen. ✅

Hur man skriver till fil i Python

För att skriva till en textfil i Python, bör du öppna den i skrivläge – ange ’w’.

Kodavsnittet nedan visar hur man gör.

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

Du kommer att se att ”new_file.txt” har skapats i din arbetskatalog.

Kör nu kodcellen ovan igen.

Kör följande kommando i din terminal:

cat new_file.txt

# Output: Hello, Python!

Helst har vi skrivit till filen två gånger. Så hej, Python! borde ha skrivits ut två gånger, eller hur?

Men du kommer att se att den bara har skrivits ut en gång. Tja, detta beror på att när du öppnar en fil i skrivläge (w), skriver du i princip över innehållet i filen med nytt innehåll.

Om du vill lägga till i slutet av filen utan att skriva över befintligt innehåll, bör du öppna filen i tilläggsläget. Och du kommer att se hur du gör detta i nästa avsnitt.

Hur man lägger till fil i Python

Om du vill lägga till innehåll till en fil – utan att skriva över, öppna den i tilläggsläget.

För att göra detta, använd `’a’—a för att lägga till—och specificera läget explicit.

Kör sedan följande kodcell två gånger.

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

Lägg märke till hur texten skrivs ut två gånger nu, som vi har lagt till i filen.

cat new_file.txt

# Output: Hello, Python!Hello, Python!

Slutsats

Låt oss snabbt sammanfatta vad vi har gått igenom i den här handledningen.

  • Du har lärt dig de vanliga I/O-funktionerna för filer som att läsa, skriva och lägga till en fil.
  • Dessutom har du också lärt dig hur du använder metoden seek() för att flytta filpekaren till en specifik position, och
  • hur man använder metoden tell() för att hämta den aktuella positionen för filpekaren.

Jag hoppas att du tyckte att denna handledning var till hjälp. Nu när du har lärt dig hur du arbetar med textfiler i Python, lär dig hur du arbetar med JSON-filer i Python.

Relaterad:

Kontrollera längden på en lista i Python i 3 steg.