2014-11-03 4 views
0
import filecmp 

user = 't' 
con = open(user + '.txt','a') 
new = open(user + 'newfile.txt','a') 
if filecmp.cmp(con, new) == True: 
    print('good') 
else: 
    print('bad') 

Файлы t.txt и tnewfile.txt имеют в них букву w. Почему он бросает TypeError?Почему это вызывает ошибку типа?

TypeError: coercing to Unicode: need string or buffer, file found 
+0

Как вы заметили, почему вы открываете файлы в режиме 'a', если хотите просто прочитать их? В зависимости от вашей платформы это может сразу начать вас в конце файла или даже вернуться к концу файла после каждой операции (в любом случае, это означает, что вы будете сравнивать окончательные 0 байтов каждого файла, что равно n Очень интересно. Это не ваша настоящая проблема, но если ваша фактическая проблема не существует, это означает, что вы всегда печатаете «добро». – abarnert

ответ

3

filecmp.cmp() функция принимает файл имена, то есть строки, а не открытые объекты файлов.

должно работать:

user = 't' 
con = user + '.txt' 
new = user + 'newfile.txt' 
if filecmp.cmp(con, new): 
    print('good') 
else: 
    print('bad') 

Обратите внимание, что вам не нужно использовать == True здесь; это полностью избыточно и даже подвержено ошибкам.

+0

Большое спасибо, моя группа и я застряли на этом некоторое время. –

Смежные вопросы