Я пишу программу, которая просматривает CSV в каталоге и добавляет содержимое каждого CSV в список. Вот фрагмент оскорбительного кода:
import glob
import re
c = glob.glob("*.csv")
print c
archive = []
for element in c:
look = open(element, "r").read()
open = re.split("\n+", look)
for n in open:
n = re.split(",", n)[0]
archive.append(n)
Однако когда я запускаю этот скрипт, я получаю TypeError: 'list' object is not callable
. Может кто-нибудь объяснить, пожалуйста, что происходит?
4 ответа
Я думаю, это потому, что вы переопределяете open
как список и вызываете его в следующей итерации цикла. Просто дайте списку другое имя.
Обратите внимание, что в строках есть метод split()
для случаев, когда вам не нужно регулярное выражение.
Тот факт, что open
является встроенной функцией, не имеет значения. Это могла быть функция, определенная в том же модуле.
Основная проблема заключается в том, что одно и то же имя использовалось для ссылки на два разных объекта (функцию и список), оба из которых были необходимы снова. Когда первый объект был нужен снова, имя ссылалось на второй объект. Результат: сплат. Золотое правило таково: не используйте имена бездумно.
Золотое правило таково: никогда не используйте имя встроенной вещи для своих переменных!
Это вопрос алиасинга, просто не вызывайте список open
..
Согласитесь с предыдущими ответами: никогда не вызывайте переменную open
или любую другую встроенную,
Вас может заинтересовать модуль csv Python, который будет правильно анализировать файлы CSV, которые { {X0}} не будет.
Также вы можете использовать объект файла в качестве построчного итератора, например:
for line in open('data.csv'):
do_something(line)
Похожие вопросы
Новые вопросы
python
Python - это многопарадигмальный, динамически типизированный, многоцелевой язык программирования. Он разработан для быстрого изучения, понимания и использования, а также для обеспечения чистого и единообразного синтаксиса. Обратите внимание, что Python 2 официально не поддерживается с 01.01.2020. Тем не менее, для вопросов о Python, связанных с версией, добавьте тег [python-2.7] или [python-3.x]. При использовании варианта Python (например, Jython, PyPy) или библиотеки (например, Pandas и NumPy) включите его в теги.