gpt4 book ai didi

python - 在Python ftplib中创建并上传到FTP的文件为空

转载 作者:太空宇宙 更新时间:2023-11-03 19:56:22 26 4
gpt4 key购买 nike

我正在尝试使用 json 与 Python 进行简单的服务器-客户端交互。但现在我有一个问题,我的 .json 文件确实上传了,但在服务器端它是空的。

你能帮我吗?

import json
import urllib.request
import os
import time
import ftplib
import fileinput
from ftplib import FTP

url = urllib.request.urlopen("http://example.com/path/data.json").read()
rawjson = url.decode("utf-8")

number = input("Bank number: ")

result = json.loads(url)

name = result[number]["name"]
salary = result[number]["salary"]

strsalary = str(salary)

newsalary = input("New salary: ")

os.system("wget http://example.com/path/data.json")

newtext = rawjson.replace(strsalary, newsalary)

textfile = open("data.json", "w")
textfile.write(newtext)

#domain name or server ip:
ftp = FTP('example.com','usr','pswd')
ftp.cwd("/path")
file=open('data.json', 'rb')
ftp.storbinary('STOR data.json', file)

这是客户端脚本,我想通过 json 与简单的 Web 服务器而不是 Python 服务器创建客户端服务器交互。

最佳答案

写入文本文件的代码不会关闭它。因此,当您尝试读取文件进行上传时,该文件可能尚未完全刷新到磁盘。

要正确关闭文件,最佳做法是使用 with block :

with open("data.json", "w") as textfile:
textfile.write(newtext)
<小时/>

尽管如果您仅使用该文件作为临时存储要上传到 FTP 的数据/文本的方式,则根本不必使用物理文件。

使用内存中类似文件的对象,例如 StringIO (或BytesIO):

from io import StringIO
ftp.storbinary('STOR data.json', StringIO(newtext))

另请参阅Can I upload an object in memory to FTP using Python?

<小时/>

您使用与上传文件完全不同的 API 下载文件,这也很奇怪。您应该使用FTP.retrbinary。与上传类似,您根本不需要将内容存储到本地文件中。您可以将内容下载到内存中。但这超出了这个问题的范围。

关于python - 在Python ftplib中创建并上传到FTP的文件为空,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59510194/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com