我将csv文件路径传递给此函数。
def validateCSV(filename):
with open(filename, 'rb') as file:
print type(filename)
if not filename.readlines():
print 'empty file'
else:
reader = csv.reader(file)
for row in reader:
print row
file.close()
但是当我运行此操作时出现错误
'unicode'对象没有属性'readlines'
但是当我检查csv文件的类型时,它是unicode。所以我明白他们需要一个文件对象。那么如何将unicode转换为文件对象。 然后我尝试了这个,
filename = filename.encode("utf-8")
然后它的类型变成字符串并显示另一个错误。
'str'对象没有属性'readlines'
请帮帮我。谢谢。
答案 0 :(得分:1)
您正在从文件名中调用readline()
方法,该方法肯定是Unicode对象。如果你想检查你的文件是否为空,你只需使用next
函数获取第一行并用try-except语句包装它:
def validateCSV(filename):
with open(filename, 'rb') as f:
reader = csv.reader(f)
try:
first_row = next(reader)
except StopIteration:
print('empty file')
return
else:
print(first_row)
for row in reader:
print row
另请注意,在使用with
上下文管理器时,无需关闭文件对象。它将自动关闭块末尾的文件。
答案 1 :(得分:-1)
参考以下行: - if not filename.readlines():
readlines()是存在于文件类型对象上而不是字符串对象上的方法。
def validateCSV(filename):
#filename = filename.encode("utf-8")
with open(filename, 'rb') as file:
print type(filename)
if not file.readlines():
print 'empty file'
else:
reader = csv.reader(file)
for row in reader:
print row
file.close()