我正在尝试将我在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()
我做错了什么?
由于
答案 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)
将文件位置重置为文件的最开头。