我正在尝试读取目录中的文本文件。但是在做任何动作之前我想确保它不是空的。如果文本文件为空,我需要再次创建该空文件(在当前目录中),如果不是,我需要对文本文件的每一行执行一些计算并创建相应的文件同名。简而言之,我需要创建与引用目录(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
答案 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
来构建路径,因此{名称}}在使用名称时更加清晰。