Hoe kan ik de bestandsgrootte in Python controleren?

Ik schrijf een Python-script in Windows. Ik wil iets doen op basis van de bestandsgrootte. Als de grootte bijvoorbeeld groter is dan 0, stuur ik een e-mail naar iemand, anders ga je verder met andere dingen.

Hoe controleer ik de bestandsgrootte?


Antwoord 1, autoriteit 100%

Je hebt de st_size eigendom van het object geretourneerd door os.stat. Je kunt het verkrijgen door ofwel pathlib te gebruiken (Python 3.4+ ):

>>> from pathlib import Path
>>> Path('somefile.txt').stat()
os.stat_result(st_mode=33188, st_ino=6419862, st_dev=16777220, st_nlink=1, st_uid=501, st_gid=20, st_size=1564, st_atime=1584299303, st_mtime=1584299400, st_ctime=1584299400)
>>> Path('somefile.txt').stat().st_size
1564

of met behulp van os.stat :

>>> import os
>>> os.stat('somefile.txt')
os.stat_result(st_mode=33188, st_ino=6419862, st_dev=16777220, st_nlink=1, st_uid=501, st_gid=20, st_size=1564, st_atime=1584299303, st_mtime=1584299400, st_ctime=1584299400)
>>> os.stat('somefile.txt').st_size
1564

Uitvoer is in bytes.


Antwoord 2, autoriteit 95%

os.path.getsize:

>>> import os
>>> b = os.path.getsize("/path/isa_005.mp3")
>>> b
2071611

De uitvoer is in bytes.


Antwoord 3, autoriteit 15%

De andere antwoorden werken voor echte bestanden, maar als je iets nodig hebt dat werkt voor “bestandsachtige objecten”, probeer dan dit:

# f is a file-like object. 
f.seek(0, os.SEEK_END)
size = f.tell()

Het werkt voor echte bestanden en StringIO’s, in mijn beperkte tests. (Python 2.7.3.) De “file-like object” API is natuurlijk niet echt een rigoureuze interface, maar de API-documentatie suggereert dat bestandsachtige objecten seek() en tell() moeten ondersteunen.

Bewerken

Een ander verschil tussen dit en os.stat() is dat je een bestand stat() kunt gebruiken, zelfs als je geen toestemming hebt om het te lezen. Het is duidelijk dat de zoek/vertel-benadering niet werkt tenzij je toestemming hebt om te lezen.

Bewerk 2

Op aanraden van Jonathon is hier een paranoïde versie. (De bovenstaande versie laat de bestandsaanwijzer aan het einde van het bestand, dus als je zou proberen om uit het bestand te lezen, zou je nul bytes terug krijgen!)

# f is a file-like object. 
old_file_position = f.tell()
f.seek(0, os.SEEK_END)
size = f.tell()
f.seek(old_file_position, os.SEEK_SET)

Antwoord 4, autoriteit 9%

import os
def convert_bytes(num):
    """
    this function will convert bytes to MB.... GB... etc
    """
    for x in ['bytes', 'KB', 'MB', 'GB', 'TB']:
        if num < 1024.0:
            return "%3.1f %s" % (num, x)
        num /= 1024.0
def file_size(file_path):
    """
    this function will return the file size
    """
    if os.path.isfile(file_path):
        file_info = os.stat(file_path)
        return convert_bytes(file_info.st_size)
# Lets check the file size of MS Paint exe 
# or you can use any file path
file_path = r"C:\Windows\System32\mspaint.exe"
print file_size(file_path)

Resultaat:

6.1 MB

Antwoord 5, autoriteit 6%

Met behulp van pathlib (toegevoegd in Python 3.4 of een backport beschikbaar op PyPI):

from pathlib import Path
file = Path() / 'doc.txt'  # or Path('./doc.txt')
size = file.stat().st_size

Dit is eigenlijk alleen een interface rond os.stat, maar het gebruik van pathlib biedt een gemakkelijke manier om toegang te krijgen tot andere bestandsgerelateerde bewerkingen.


Antwoord 6, autoriteit 3%

Er is een bitshift-truc die ik gebruik als ik bytes naar een andere eenheid wil converteren. Als je 10 naar rechts verschuift, verschuif je het in feite met een bestelling (veelvoud).

Voorbeeld: 5GB are 5368709120 bytes

print (5368709120 >> 10)  # 5242880 kilobytes (kB)
print (5368709120 >> 20 ) # 5120 megabytes (MB)
print (5368709120 >> 30 ) # 5 gigabytes (GB)

Antwoord 7

Als we ons strikt aan de vraag houden, zou de Python-code (+ pseudo-code) zijn:

import os
file_path = r"<path to your file>"
if os.stat(file_path).st_size > 0:
    <send an email to somebody>
else:
    <continue to other things>

Antwoord 8

we hebben twee opties. Beide omvatten het importeren van de os-module

1)

import os
os.stat("/path/to/file").st_size

as os.stat() functie retourneert een object dat zoveel kopteksten bevat, inclusief de tijd van het aanmaken van het bestand en de laatste wijzigingstijd enz. waaronder st_size de exacte grootte geeft van het bestand.
Het bestandspad kan absoluut of relatief zijn.

2)
Hierin moeten we het exacte bestandspad opgeven, het bestandspad kan relatief of absoluut zijn.

import os
os.path.getsize("path of file")

Antwoord 9

Je kunt de stat() methode uit de os module gebruiken. Je kunt het een pad geven in de vorm van een string, bytes of zelfs een PathLike-object. Het werkt ook met bestandsdescriptors.

import os
res = os.stat(filename)
res.st_size # this variable contains the size of the file in bytes

Antwoord 10

#Get file size , print it , process it...
#Os.stat will provide the file size in (.st_size) property. 
#The file size will be shown in bytes.
import os
fsize=os.stat('filepath')
print('size:' + fsize.st_size.__str__())
#check if the file size is less than 10 MB
if fsize.st_size < 10000000:
    process it ....

Antwoord 11

Je kunt een bestandsgrootte controleren met

import sys
print(sys.getsizeof(your_file))

Bijvoorbeeld

nums = range(10000)
squares = [i**2 for i in nums]
print(sys.getsizeof(squares))

LEAVE A REPLY

Please enter your comment!
Please enter your name here

Other episodes