How do I check file size in Python?
You need the st_size
property of the object returned by os.stat
. You can get it by either using pathlib
(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
or using 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
Output is in bytes.
can't get a file size in python
It is failing because of the line os.chdir(mypath)
. You don't need to chdir()
.
Assuming the path is correct and the file exists, it should work (print the file size) if you remove the os.chdir()
statement.
Get file size, creation date and modification date in Python
https://docs.python.org/2.7/library/os.path.html#module-os.path
os.path.getsize(path) # size in bytes
os.path.ctime(path) # time of last metadata change; it's a bit OS specific.
Here's a rewrite of your program. I did this:
- Reformatted with autopep8 for better readability. (That's something you can install to prettify your code your code. But IDEs such as PyCharm Community Edition can help you to do the same, in addition to helping you with code completion and a GUI debugger.)
- Made your
getListofFiles()
return a list of tuples. There are three elements in each one; the filename, the size, and the timestamp of the file, which appears to be what's known as an epoch time (time in seconds since 1970; you will have to go through python documentation on dates and times). - The tuples is written to your text file in a .csv style format (but note there are modules to do the same in a much better way).
Rewritten code:
import os
def getListOfFiles(ruta):
listOfFile = os.listdir(ruta)
allFiles = list()
for entry in listOfFile:
fullPath = os.path.join(ruta, entry)
if os.path.isdir(fullPath):
allFiles = allFiles + getListOfFiles(fullPath)
else:
print('getting size of fullPath: ' + fullPath)
size = os.path.getsize(fullPath)
ctime = os.path.getctime(fullPath)
item = (fullPath, size, ctime)
allFiles.append(item)
return allFiles
ruta = "FolderPath"
miArchivo = open("TxtPath", "w")
listOfFiles = getListOfFiles(ruta)
for elem in listOfFiles:
miArchivo.write("%s,%s,%s\n" % (elem[0], elem[1], elem[2]))
miArchivo.close()
Now it does this.
my-MBP:verynew macbookuser$ python verynew.py; cat TxtPath
getting size of fullPath: FolderPath/dir2/file2
getting size of fullPath: FolderPath/dir2/file1
getting size of fullPath: FolderPath/dir1/file1
FolderPath/dir2/file2,3,1583242888.4
FolderPath/dir2/file1,1,1583242490.17
FolderPath/dir1/file1,1,1583242490.17
my-MBP:verynew macbookuser$
Python | HTTP - How to check file size before downloading it
If the server supplies a Content-Length
header, then you can use that to determine if you'd like to continue downloading the remainder of the body or not. If the server does not provide the header, then you'll need to stream the response until you decide you no longer want to continue.
To do this, you'll need to make sure that you're not preloading the full response.
from urllib3 import PoolManager
pool = PoolManager()
response = pool.request("GET", url, preload_content=False)
# Maximum amount we want to read
max_bytes = 1000000
content_bytes = response.headers.get("Content-Length")
if content_bytes and int(content_bytes) < max_bytes:
# Expected body is smaller than our maximum, read the whole thing
data = response.read()
# Do something with data
...
elif content_bytes is None:
# Alternatively, stream until we hit our limit
amount_read = 0
for chunk in r.stream():
amount_read += len(chunk)
# Save chunk
...
if amount_read > max_bytes:
break
# Release the connection back into the pool
response.release_conn()
how to get the size of csv file line by line?is thas possible using python
Something along the lines of this should work for getting the bytes per row/line:
(The +1 is for the newline)
import os
total_bytes = -1
with open("test.csv") as file_in:
for line in file_in:
bytes_on_this_line = len(line) + 1
total_bytes += bytes_on_this_line
print(total_bytes)
print(os.path.getsize("test.csv"))
Output:
15
15
How can I get the file size from a link without downloading it in python?
To do this use the HTTP HEAD method which just grabs the header information for the URL and doesn't download the content like an HTTP GET request does.
$curl -I https://sra-download.ncbi.nlm.nih.gov/traces/sra46/SRR/005150/SRR5273887
HTTP/1.1 200 OK
Server: nginx
Date: Mon, 18 Mar 2019 16:56:35 GMT
Content-Type: application/octet-stream
Content-Length: 578220087
Last-Modified: Tue, 21 Feb 2017 12:13:19 GMT
Connection: keep-alive
Accept-Ranges: bytes
The file size is in the 'Content-Length' header. In Python 3.6:
>>> import urllib
>>> req = urllib.request.Request('https://sra-download.ncbi.nlm.nih.gov/traces/sra46/SRR/005150/SRR5273887',
method='HEAD')
>>> f = urllib.request.urlopen(req)
>>> f.status
200
>>> f.headers['Content-Length']
'578220087'
how to get file size without downloading it in python requests
Instead of using GET
request, do HEAD
request:
resp = requests.request('HEAD', "https://Whereever.user.wants.com/THEFILE.zip")
The HTTP HEAD
method requests the headers that would be returned if the HEAD
request's URL was instead requested with the HTTP GET
method. In your case, where URL produces a large download, a HEAD
request would read its Content-Length
header to get the filesize without actually downloading the file.
Related Topics
Auto.Arima() Equivalent for Python
What Are Python Pandas Equivalents for R Functions Like Str(), Summary(), and Head()
Does R Have Function Startswith or Endswith Like Python
Converting Python Objects for Rpy2
Why Xgrabkey Generates Extra Focus-Out and Focus-In Events
List Nearby/Discoverable Bluetooth Devices, Including Already Paired, in Python, on Linux
Which Command to Use for Checking Whether Python Is 64Bit or 32Bit
Pip Error:'Module' Object Has No Attribute 'Cryptography_Has_Ssl_St'
Installing Python 2.7 Without Root
"E: Unable to Locate Package Python-Pip" on Ubuntu 18.04
Can You Fool Isatty and Log Stdout and Stderr Separately
Error with Igraph Library - Deprecated Library
How to Obtain Ports That a Process in Listening On
/Usr/Bin/Ld: Cannot Find -Lpython2.7
How to Control the Keyboard and Mouse with Python
Pip Install Unable to Find Ffi.H Even Though It Recognizes Libffi