我有一个大型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")
答案 0 :(得分:6)
除非附加到文件中,否则无法直接通过FTP修改文件而不上传整个文件。
原因是FTP中只有三个实际修改文件的命令(Source):
APPE
:附加到文件STOR
:上传文件STOU
:在服务器上使用唯一名称在本地缓存远程文件,并使用MDTM
命令跟踪对文件的更改。
优点:
缺点:
将XML拆分为多个文件。 (每个产品代码一个?)
这样您只需下载实际需要的数据。
优点:
缺点:
如果存储服务器支持它,切换到像rsync
这样的增量同步协议会有很大帮助,因为它们只会传输更改(只需很少的开销)。
优点:
缺点:
你已经指出你不能但它仍然是最好的解决方案。
正如评论中的某些人已经指出,切换到网络文件系统(如NFS或CIFS / SMB)不会真正有用,因为你cannot actually change parts of the file unless the new data has the exact same length。
除非你可以进行增量同步,否则我建议首先在客户端实现一些缓存,如果它没有足够的帮助那么就分割你的文件。