写入文件并使用python 2.6保存到ftp

时间:2015-03-11 07:00:26

标签: python ftp

我正在尝试将我在ftp服务器上创建的文件存储起来。

我已经能够创建临时文件并将其存储为空文件,但在存储之前我无法将任何数据写入文件。 这是部分工作的代码:

#Loggin to server.
ftp = FTP(Integrate.ftp_site)       
ftp.login(paths[0], paths[1])
ftp.cwd(paths[3])

f = tempfile.SpooledTemporaryFile()

# Throws error.
f.write(bytes("hello", 'UTF-8'))

#No error, doesn't work.
#f.write("hello")

#Also, doesn't throw error, and doesn't write anything to the file.
# f.write("hello".encode('UTF-8'))

file_name = "test.txt" 
ftp.storlines("Stor " + file_name, f)

#Done.                
f.close()    
ftp.quit()

我做错了什么?

由于

1 个答案:

答案 0 :(得分:0)

寻求!

要知道在文件(或类文件对象)中读取或写入的位置,Python会保留指向文件中某个位置的指针。文档简称为“文件的当前位置”。所以,如果您在其中填写了这些行:

hello world
how are you

您可以使用Python阅读它,如下面的代码所示。请注意,tell()函数会告诉您文件的位置。

>>> f = open('file.txt', 'r')
>>> f.tell()
0
>>> f.readline()
'hello world\n'
>>> f.tell()
12

Python现在有12个字符“进入”该文件。如果你计算字符数,那就意味着它正好在换行符之后(\n是一个字符)。继续使用readlines()或任何其他阅读功能读取文件将使用此位置知道从哪里开始阅读。

写入文件也将使用并增加位置。这意味着,如果在写入您从文件中读取的文件后,Python将开始读取它保存的位置(这是在您刚刚编写的内容之后),而不是文件的开头。

ftp.storlines()函数使用相同的readlines()函数,该函数仅在文件的位置开始读取,因此在您写完之后。您可以通过在调用ftp.storlines()之前回到文件的开头来解决此问题。使用f.seek(0)将文件位置重置为文件的最开头。