我有一个大的XML文件,大约30 MB.
我不时地需要更新一些值.我正在使用element tree模块来修改XML.我目前正在获取整个文件,更新它然后重新放置它.所以每次都有大约60 MB的数据传输.有没有办法远程更新文件?我使用以下代码更新文件.
import xml.etree.ElementTree as ET
tree = ET.parse("feed.xml")
root = tree.getroot()
skus = ["RUSSE20924","PSJAI22443"]
qtys = [2,3]
for child in root:
sku = child.find("Product_Code").text.encode("utf-8")
if sku in skus:
print "found"
i = skus.index(sku)
child.find("Quantity").text = str(qtys[i])
child.set('updated', 'yes')
tree.write("feed.xml")
Run Code Online (Sandbox Code Playgroud)
除非附加到文件,否则无法通过FTP直接修改文件而无需上传整个文件.
原因是FTP中只有三个实际修改文件的命令(Source):
APPE:追加到文件STOR:上传文件STOU:使用唯一名称在服务器上创建新文件在本地缓存远程文件并使用该MDTM命令跟踪对文件的更改.
优点:
缺点:
将XML拆分为多个文件.(每个产品代码一个?)
这样您只需下载实际需要的数据.
优点:
缺点:
如果存储服务器支持它,那么切换到增量同步协议rsync会有很大帮助,因为它们只会传输更改(只需很少的开销).
优点:
缺点:
你已经指出你不能但它仍然是最好的解决方案.
正如评论中的某些人已经指出,切换到网络文件系统(如NFS或CIFS/SMB)并不会真正有用,因为除非新数据具有完全相同的长度,否则您无法实际更改文件的某些部分.
除非你可以进行增量同步,否则我建议首先在客户端实现一些缓存,如果它没有足够的帮助,那么就分割你的文件.