Итак, я пытаюсь прочитать файл csv и распечатать его в терминале, хотя и более стилизованный, но я сталкиваюсь с этой ошибкой:
reader = csv.reader(open(f'Saved_data/Saved_Outputs/{file}.csv',encoding='latin1'))
TypeError: 'NoneType' object is not callable
Итак, какая часть возвращает None? Файл существует, я дважды это проверил. Так почему это дает мне эту ошибку? Ниже приведен фрагмент кода, который может помочь в некотором контексте:
reader = csv.reader(open(f'Saved_data/Saved_Outputs/{file}.csv',encoding='latin1'))
mock_data = []
for row in reader:
mock_data.append(row)
header = mock_data.pop(0)
def fixed_length(text, length):
if len(text) > length:
text = text[:length]
elif len(text) < length:
text = (text + " " * length) [:length]
return text
def draw_table(data):
os.system('clear')
print("#"*126)
print("# ", end = " ")
for column in header:
print(fixed_length(column, 20), end = " # ")
print("")
print("#"*126)
for row in data:
print("# ", end = ' ')
for column in row:
print(fixed_length(column, 20), end = ' # ')
print("")
print("#"*126)
draw_table(mock_data)
@DeepSpace Да, но только для создания того же файла CSV. При втором открытии (...) я открываю только что созданный файл.
Нет, потому что open
больше не относится к встроенной функции open
.
Как сказал @DeepSpace, это, вероятно, открытое. Попробуйте абсолютный путь. Также советуем сделать with open(...) as csvFile:
Вопрос не в том, какая часть возвращаетсяNone
; вопрос в какой части являетсяNone
. В сообщении об ошибке говорится, что он «не вызывается», потому что вы пытаетесь его вызвать. open = None; open(...)
будет ошибкой независимо от того, что часть ...
, и это будет не волнует, что есть встроенная функция под названием open
- вы изменили то, для чего это имя используется.
@user_na с использованием абсолютных путей или with
здесь не поможет.
@Karl Оказывается, ошибка произошла из-за ...,encoding='latin1'
. Однако, если я его не использую, в моем терминале файл вернет тарабарщину. Почему это?
Ошибка возникает из-за неправильной кодировки файла latin1
. Тарабарщина может быть связана с тем, что кодировка по умолчанию также неверна, или это может быть потому, что ваш терминал неправильно настроен для отображения текста, или это может быть потому, что файл на самом деле содержит тарабарщину. Вам следует изучить кодировку текста, поискать повторяющиеся вопросы, а затем задать новый вопрос, если вы действительно не можете его решить.
@Karl Thx я буду
@ mkrieger1 да, вы правы, open больше не является встроенным open.
Где-то в вашем коде (над этой строкой) вы, вероятно, используете
open = ...
, а...
- этоNone