IOError открытие существующего файла с помощью 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)
Генерирует следующую ошибку:
ftplib.error_perm: 550 /Users/admin/Documents/678538.local @ 02-24-2010 1301.txt: No such file or directory
У меня такое чувство, что в этой строке что-то не так :
s.storbinary("STOR /Users/admin/Documents/%s.txt" % smush,f)
678538 - это хост, на котором я тестирую ... используя Mac OS X 10.5 и Python 2.5.1
Решение 3
Редактировать:
Эта версия работает:Проблема заключалась в том, что я записывал в буфер, а не в файл.
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
Другие советы
Разве это не должно бытьf = open('/Users/admin/Documents/%s.txt' % smush,'r')
?обратите внимание на /
перед Users
Если вы не поставите первый /
, скрипт будет считать, что путь к файлу относится к текущему каталогу (откуда запускается скрипт).
Редактировать:
Я не слишком знаком с Python (хотелось бы), но разве это не должно быть:
s.storbinary('STOR /Users/admin/Documents/%s.txt' % smush,f)
?
В вашем примере Python будет обрабатывать вашу строку как литерал, и вы хотите интерполировать значение smush с помощью %s
Правка 2:
Есть ли в каталоге /Users/admin/Documents/
существуют на вашем сервере?Если нет, я думаю, вам придется создать их, прежде чем что-либо копировать.(Поскольку сообщение об ошибке касается отсутствия некоторых файлов / папок).
Сначала вы можете создать их сами.Запустите свой скрипт.Если файл скопирован успешно, то вы можете добавить создание каталогов из вашего скрипта.
удалите все пробелы из имени файла .например, в smush = str(fqn +' @ ' + formatdate)
, вы ставите пробел перед "@" и после него.ваш путь выглядит как
/Users/admin/Documents/something @ something
и когда вы передаете его в ftplib, у него могут возникнуть проблемы.другой способ - попробовать заключить в кавычки, например
s.storbinary("STOR '/Users/admin/Documents/%s.txt'" % smush,f)