关于python:如果一个文件是空的,而不使用with open,如何检查它?

How to check a file if it is empty without using with open?

本问题已经有最佳答案,请猛点这里访问。

我试图读取目录中的文本文件。但是,在执行任何操作之前,我要确保它不是空的。如果文本文件是空的,我需要再次创建该空文件(在当前目录中,也就是说),如果不是,我需要对文本文件的每一行执行一些计算,并使用相同的名称创建相应的文件。简言之,我需要创建所引用目录(path_in中)所具有的尽可能多的文件。

为了检查文本文件是否是空的,我认为应该先打开它。我用open打开它,它的把手是filename_handle。我查了一下它是不是空的,但是它在这里升起了。我知道发生这个错误的原因(因为filename_handle是对象),但我不知道如何检查文件是否为空。

有人能帮我修一下吗?

这是我的密码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
import numpy as np
import cv2, os
from glob import glob

path_in = 'C:\\Users\\user\\Desktop\\labels'

for filename in os.listdir(path_in):
    filename_edited = []
    with open(path_in + '\' +filename) as filename_handle:

        if os.stat(filename_handle).st_size == 0:
            filename_edited.append(filename_handle)
        else:
            for line in filename_handle:
                numericdata = line.split('
')
                numbers = []
                for i in numericdata:
                    numbers.append(int(i))
                c,x,y = numbers
                edited = [c, y, (19-x)]
                filename_edited.append(edited)
                filename_edited_array = np.array(filename_edited)

        with open(filename , '
wb') as f:
            np.savetxt(f, filename_edited_array,fmt= '
%.1i', delimiter=' ', newline='
', header='', footer='', comments='# ')

        continue


os.stat采用文件名或整数文件描述符。它不接受任意文件对象。

所以你要么做:

1
os.stat(filename_handle.fileno()).st_size

从打开的文件中提取文件描述符,或者:

1
os.stat(path_in + '\' +filename).st_size

它按名称统计文件,需要一个打开的文件句柄。更恰当地说,您应该真的使用os.path.join来构建路径,所以命名时os.stat(os.path.join(path_in, filename)).st_size将是更清洁的方法。


可以使用os.path.getSize()方法获取作为参数传递的文件的大小(以字节为单位)。如果文件为空,则大小为0字节。因此,您可以使用下面的代码来检查它:

1
2
3
import os
if os.path.getsize('path/to/file.txt') == 0: # If the file size is 0 bytes
    # Implementation