如果文件为空而不使用打开,如何检查?

时间:2018-03-30 01:58:41

标签: python python-3.x io

我正在尝试读取目录中的文本文件。但是在做任何动作之前我想确保它不是空的。如果文本文件为空,我需要再次创建该空文件(在当前目录中),如果不是,我需要对文本文件的每一行执行一些计算并创建相应的文件同名。简而言之,我需要创建与引用目录(path_in)一样多的文件。

所以要检查文本文件是否为空我想我应该先打开它。我用open打开它,其句柄为filename_handle。我检查它是否为空,但在这里它引发了TypeError: argument should be string, bytes or integer, not _io.TextIOWrapper。我知道为什么会出现这个错误(因为filename_handle是对象),但我不知道如何检查文件是否为空。

有人可以帮我解决这个问题。

这是我的代码

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='\n', header='', footer='', comments='# ')

        continue

2 个答案:

答案 0 :(得分:1)

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

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

答案 1 :(得分:1)

os.stat takes the file name or the integer file descriptor。它不接受任意文件对象。

所以你需要做:

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

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

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

按名称对文件进行统计,需要打开文件句柄。更准确地说,您应该使用os.path.join来构建路径,因此{名称}}在使用名称时更加清晰。