例外:'unicode'对象没有属性'readlines'

时间:2017-03-02 16:29:58

标签: python csv unicode readlines

我将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'

请帮帮我。谢谢。

2 个答案:

答案 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()