代码之家  ›  专栏  ›  技术社区  ›  Nicholas Shaffer

用户创建的日志文件

  •  -3
  • Nicholas Shaffer  · 技术社区  · 8 年前

    我得到一个 TypeError: object of type file' has no len() 我已将问题追溯到执行时确定的路径。

    在“temp=os.path.join(savePath,files)”中的“savePath”减速或使用中发现的这个错误,我缺少什么来纠正?

    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 回复  |  直到 7 年前
        1
  •  1
  •   Lex Scarisbrick    8 年前

    以下是一个有效版本:

    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() 方法缺失了parens。

    4. 如果目的是读取在附加模式下写入的内容,则需要通过获取当前文件位置 tell() seek() 到那个位置 之后 写入文件。

    5. 尽管打电话是合法的 main() 在没有任何条件检查的情况下,通常最好确保模块被作为脚本调用,而不是被导入。