Созданные пользователем файлы журналов

Я получаю TypeError: object of type file' has no len()Я проследил проблему до пути, установленного после выполнения.

Чего мне не хватает, чтобы исправить эту ошибку, обнаруженную при замедлении "savePath" или использовании в "temp = os.path.join(savePath, files)"?

def printTime(time):
    savePath = "C:\Users\Nicholas\Documents"
    files = open("LogInLog.txt", "a")
    temp = os.path.join(savePath, files)
    files.write("A LogIn occured.")
    files.write(time)
    print files.read
    files.close

main()

Вся программа ниже для справки:

from time import strftime
import os.path

def main():
    getTime()

def getTime():
    time = strftime("%Y-%m-%d %I:%M:%S")
    printTime(time)

def printTime(time):
    savePath = "C:\Users\Nicholas\Documents"
    files = open("LogInLog.txt", "a")
    temp = os.path.join(savePath, files)
    files.write("A LogIn occured.")
    files.write(time)
    print files.read
    files.close

main()

1 ответ

Решение

Вот рабочая версия:

from time import strftime
import os.path

def main():
    getTime()

def getTime():
    time = strftime("%Y-%m-%d %I:%M:%S")
    printTime(time)

def printTime(time):
    savePath = "C:\Users\Nicholas\Documents"
    logFile = "LogInLog.txt"
    files = open(os.path.join(savePath, logFile), "a+")
    openPosition = files.tell()
    files.write("A LogIn occured.")
    files.write(time)
    files.seek(openPosition)
    print(files.read())
    files.close()

if __name__ == '__main__':
    main()

Было несколько проблем с фрагментом кода, размещенным в вопросе:

  1. Два оператора импорта были объединены. Каждый должен быть на отдельной строке.

  2. os.path.join функция не работает с открытым дескриптором файла.

  3. read() а также close() методы были пропущены.

  4. Если целью является чтение того, что написано в режиме добавления, необходимо получить текущую позицию файла через tell() а также seek() в эту позицию после записи в файл.

  5. Пока дозволено звонить main() без какой-либо условной проверки обычно лучше убедиться, что модуль вызывается как скрипт, а не как импортируемый.

Другие вопросы по тегам