使用Python打开现有文件时出错

2024-09-28 21:56:32 发布

您现在位置:Python中文网/ 问答频道 /正文

运行以下代码:

import os
import datetime
import ftplib

currdate = datetime.datetime.now()
formatdate = currdate.strftime("%m-%d-%Y %H%M")

def log():

    fqn = os.uname()[1]
    ext_ip = urllib2.urlopen('http://whatismyip.org').read()
    log = open ('/Users/admin/Documents/locatelog.txt','w')
    log.write(str("Asset: %s " % fqn))
    log.write(str("Checking in from IP#: %s" % ext_ip))
    smush = str(fqn +' @ ' + formatdate)
    os.rename('/Users/admin/Documents/locatelog.txt','/Users/admin/Documents/%s.txt' %  smush )

    s = ftplib.FTP('10.7.1.71','username','password')
    f = open('/Users/admin/Documents/%s.txt' % smush,'r')
    s.storbinary("STOR /Users/admin/Documents/%s.txt" % smush,f)

生成以下错误:

^{pr2}$

我觉得这行有点不对劲:

s.storbinary("STOR /Users/admin/Documents/%s.txt" % smush,f)

678538是我正在测试的主机…使用MacOSX10.5和Python2.5.1


Tags: importtxtlogdatetimeadminosusersext
3条回答

不应该是f = open('/Users/admin/Documents/%s.txt' % smush,'r')?注意/前面的/

如果不放第一个/,脚本会认为文件的路径是相对于当前目录(脚本运行的地方)的

编辑

我不太熟悉Python(我希望如此),但不应该是:

s.storbinary('STOR /Users/admin/Documents/%s.txt' % smush,f)?在

在您的示例中,Python将把字符串视为文本,您希望用%s插值smush的值

编辑2

目录/Users/admin/Documents/是否存在于服务器上?如果没有,我想你必须在复制之前创建它们。(因为错误消息是关于某些文件/文件夹丢失的)。在

你可以先自己创造。运行脚本。如果文件复制成功,则可以从脚本中添加目录的创建。在

删除文件名中的所有空格。例如在smush = str(fqn +' @ ' + formatdate)中,您在“@”前后放置一个空格。你的路径看起来像

/Users/admin/Documents/something @ something

当你把它传给ftplib,它可能有问题。另一种方法是试着加引号,如

^{pr2}$

编辑:

这个版本有效:问题是我写的是缓冲区,而不是文件。在

import os
import urllib2
import datetime
import ftplib

currdate = datetime.datetime.now()
formatdate = currdate.strftime("%m-%d-%Y-%H%M")

def log():

    fqn = os.uname()[1]
    ext_ip = urllib2.urlopen('http://whatismyip.org').read()
    smush = str(fqn + formatdate)
    s = ftplib.FTP('10.7.1.71','username','password')
    f = open('/Users/admin/Documents/%s.txt' % smush,'w')
    f.write(str("Asset: %s " % fqn))
    f.write('\n')
    f.write(str("Checking in from IP#: %s" % ext_ip))
    f.write('\n')
    f.write(str("On: %s" % formatdate))
    f.close
    f = open('/Users/admin/Documents/%s.txt' % smush,'rb')
    s.storbinary('STOR %s.txt' % smush , f)
    s.close
    f.close

相关问题 更多 >