#python-3.x
#python-3.x
Вопрос:
Итак, у меня есть 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'
Это не имеет смысла, потому что тип (csvFile) не является str, и я делаю то же самое, что и выше?
Может кто-нибудь мне помочь, я очень расстраиваюсь!
Спасибо!
Комментарии:
1. локальное наследование функций внутри функции, похоже, не соответствует.
2. Если вы примете один из ответов, это поможет пометить проблему как решаемую, чтобы другим не нужно было пытаться помочь. meta.stackexchange.com/questions/5234 /…
Ответ №1:
Смотрите Встроенный комментарий, что пошло не так.
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
Комментарии:
1. Большое спасибо за помощь, ребята! Я подумаю о том, чтобы не использовать имена библиотек в качестве переменных!
2. Учитывается также для имен встроенных в python; p
Ответ №2:
Не используйте имя библиотеки в качестве имени переменной в определении функции.