我正在Windows中编写Python脚本。我想根据文件大小做一些事情。例如,如果大小大于0,我将向某人发送电子邮件,否则继续其他事情。
如何检查文件大小?
答案 0 :(得分:944)
使用os.path.getsize
:
>>> import os
>>> b = os.path.getsize("/path/isa_005.mp3")
>>> b
2071611L
输出以字节为单位。
答案 1 :(得分:579)
使用os.stat
,并使用生成对象的st_size
成员:
>>> import os
>>> statinfo = os.stat('somefile.txt')
>>> statinfo
(33188, 422511L, 769L, 1, 1032, 100, 926L, 1105022698,1105022732, 1105022732)
>>> statinfo.st_size
926L
输出以字节为单位。
答案 2 :(得分:113)
其他答案适用于真实文件,但如果您需要适用于“类文件对象”的内容,请尝试以下操作:
# f is a file-like object.
f.seek(0, os.SEEK_END)
size = f.tell()
在我的有限测试中,它适用于真实文件和StringIO。 (Python 2.7.3。)当然,“类文件对象”API并不是一个严格的界面,但是API documentation表明类文件对象应该支持seek()
和{{1 }}
修改强>
这与tell()
之间的另一个区别是即使您没有阅读权限,也可以os.stat()
一个文件。显然,除非您具有读取权限,否则搜索/告知方法将无效。
修改2
在Jonathon的建议下,这是一个偏执的版本。 (上面的版本将文件指针留在文件的末尾,所以如果你试图从文件中读取,你将得到零字节!)
stat()
答案 3 :(得分:55)
global start
section .data
newline: db 10
input: times 256 db 0
.len: equ $ - input
prompt1: db 'Enter a number: '
.len: equ $ - prompt1 ; The difference between the current working address and prompt1's address: the length of prompt1
prompt2: db 'Enter another number: '
.len: equ $ - prompt2
resultmsg: db 'The result is: '
.len: equ $ - resultmsg
section .text
start:
mov rsi, prompt1 ; Address of message
mov rdx, prompt1.len ; Length of message
call print
call read
call print_newline
mov rbx, [input] ; Store the value of input
mov rsi, prompt2
mov rdx, prompt2.len
call print
call read
call print_newline
add rbx, [input] ; Add the value of the latest input to the previous one
mov rsi, resultmsg
mov rdx, resultmsg.len
call print
push rbx ; Push the sum in order to get a pointer to it (in rsp)
mov rsi, rsp
mov rdx, 8
call print
call print_newline
call exit
print:
mov rax, 0x2000004 ; Set command to write string
mov rdi, 1 ; Set output to STDOUT
syscall ; Call kernel
ret
print_newline:
mov rsi, newline
mov rdx, 1
call print
ret
read:
mov rax, 0x2000003 ; Set command to read string
mov rdi, 0 ; Set input to STDIN
mov rsi, input
mov rdx, input.len
syscall
ret
exit:
mov rax, 0x2000001 ; Set command to exit
mov rdi, 0 ; Set exit code to 0 (normal execution)
syscall
结果:
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)
答案 4 :(得分:24)
使用pathlib
(added in Python 3.4或PyPI上提供的后端):
from pathlib import Path
file = Path() / 'doc.txt' # or Path('./doc.txt')
size = file.stat().st_size
这实际上只是os.stat
周围的界面,但使用pathlib
提供了一种访问其他文件相关操作的简便方法。
答案 5 :(得分:11)
如果我想从bitshift
转换为任何其他单元,我会使用bytes
技巧。如果按10
进行右移,则基本上按顺序(多次)进行移位。
示例:
5GB are 5368709120 bytes
print (5368709120 >> 10) # 5242880 kilo Bytes (kB)
print (5368709120 >> 20 ) # 5120 Mega Bytes(MB)
print (5368709120 >> 30 ) # 5 Giga Bytes(GB)
答案 6 :(得分:8)
严格坚持这个问题,python代码(+伪代码)将是:
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>
答案 7 :(得分:0)
#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 ....
答案 8 :(得分:0)
我们有两个选择都包括导入os模块
1)
import os
,
由于os.stat()
函数返回的对象包含很多标头,包括文件创建时间和上次修改时间等。其中st_size
提供了文件的确切大小。
os.stat("filename").st_size
2)
import os
在这种情况下,我们必须提供确切的文件路径(绝对路径),而不是相对路径。
os.path.getsize("path of file")
答案 9 :(得分:0)
您可以使用来检查文件大小
import sys
print(sys.getsizeof(your_file))
例如,
nums = range(10000)
squares = [i**2 for i in nums]
print(sys.getsizeof(squares))
答案 10 :(得分:0)
您可以使用stat()
模块中的os
方法。您可以为它提供字符串,字节甚至PathLike对象形式的路径。它也适用于文件描述符。
import os
res = os.stat(filename)
res.st_size # this variable contains the size of the file in bytes