首页 > 解决方案 > 通过方法读取 CSV 文件时出现奇怪的错误

问题描述

所以,我的目录中有一个 CSV 文件 (league.csv'),我想通过 Python 访问它。

当我这样做时:

with open('league.csv', 'r') as csvFile:
  csvReader = csv.reader(csvFile)

  next(csvReader)

  for line in csvReader:
    print(line[0])

它工作得很好。但是当我试图把它变成一个函数时它不起作用:

def createLeague(csv):

  with open(csv, 'r') as csvFile:
      csvReader = csv.reader(csvFile)

      next(csvReader)

      for line in csvReader:
        print(line[0])
  return

如果我使用以下方法调用它:

createLeague('league.csv')

我得到错误

csvReader = csv.reader(csvFile)
AttributeError: 'str' object has no attribute 'reader'

这是没有意义的,因为 type(csvFile) 不是 str,我做的和上面的完全一样吗?

谁能帮帮我,我真的很沮丧!

谢谢!

标签: python-3.x

解决方案


查看内联注释出了什么问题。

import csv                           # "csv" variable at "with open..." overwrites
                                     # cvs module.
from csv import reader               # required to use the function "reader" from csv.

def createLeague(csv):               # "csv" variable overwrites cvs module.

  with open(csv, 'r') as csvFile:
    csvReader = reader(csvFile)      # skip the csv. here and it works for you.
    next(csvReader)

    for line in csvReader:
        print(line[0])
  return

或者:

下面更改csv 文件名的示例不会覆盖您刚刚加载的csv 模块。混淆触发错误发生。

import csv
#from csv import reader

def createLeague(csv_file):

  with open(csv_file, 'r') as csvFile:    # changed variable "csv" filename.

    csvReader = csv.reader(csvFile)

    next(csvReader)

    for line in csvReader:
        print(line[0])
  return

推荐阅读