【问题标题】:Exception : 'unicode' object has no attribute 'readlines' [closed]例外:“unicode”对象没有属性“readlines”[关闭]
【发布时间】:2017-07-22 11:54:27
【问题描述】:

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

请帮助我。在此先感谢。

【问题讨论】:

  • filename 不是file
  • @PeterWood 我没听懂你说什么。请给我一个细节
  • @PeterWood 文件名是一个 unicode 对象
  • replace ` if not filename.readlines(): ` 为 if not file.readlines() 这就是 Peter Wood 的意思
  • 但我无法读取文件内容

标签: python csv unicode readlines


【解决方案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()

【讨论】:

  • 投反对票的人,请说明投反对票的原因。
  • 这只是一个代码答案,您修复了什么以及为什么修复并不明显。此外,这个问题是一个糟糕的问题,很可能会被关闭。它不应该真的按现状回答。
  • 不要劝阻答案作者,你必须劝阻提出此类问题的人。
  • @ManguSinghRajpurohit 我同意你所说的气馁。投入你的回答对我来说没有意义。
  • 答案没有说明代码中的问题。例如,它仍然不正确,因为file.readlines() 将读取整个文件,因此csv 阅读器没有任何内容可供阅读。这不是一个好的答案。您还可以要求提问者澄清他们的问题并鼓励提出好的问题。
【解决方案2】:

您正在从您的文件名中调用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 上下文管理器时,您不需要关闭文件对象。它会自动关闭块末尾的文件。

【讨论】:

    猜你喜欢
    • 2017-12-17
    • 2016-11-08
    • 2014-11-25
    • 2013-12-28
    • 2015-10-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多