如何远程修改大文件

nis*_*ish 0 python

我有一个大的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)

ntn*_*nja 6

除非附加到文件,否则无法通过FTP直接修改文件而无需上传整个文件.

原因是FTP中只有三个实际修改文件的命令(Source):

  • APPE:追加到文件
  • STOR:上传文件
  • STOU:使用唯一名称在服务器上创建新文件

你能做什么

跟踪变化

在本地缓存远程文件并使用该MDTM命令跟踪对文件的更改.

优点:

  • 在许多情况下,所需数据的一半将转移.
  • 几乎不需要对现有代码进行任何更改.
  • 开销几乎为零.

缺点:

  • 其他客户每次发生变化时都必须下载整件事
    (当前情况没有变化)

分成几个文件

将XML拆分为多个文件.(每个产品代码一个?)
这样您只需下载实际需要的数据.

优点:

  • 传输的数据较少
  • 允许访问数据的所有脚本仅下载所需内容
  • 可与建议#1组合

缺点:

  • 所有现有代码都必须进行调整
  • 下载或更新所有数据时的额外开销

切换到增量同步协议

如果存储服务器支持它,那么切换到增量同步协议rsync会有很大帮助,因为它们只会传输更改(只需很少的开销).

优点:

  • 减少数据传输
  • 现有代码几乎不需要更改

缺点:

  • 可能无法使用

远程做

你已经指出你不能但它仍然是最好的解决方案.

什么都没有帮助

切换到网络文件系统

正如评论中的某些人已经指出,切换到网络文件系统(如NFS或CIFS/SMB)并不会真正有用,因为除非新数据具有完全相同的长度,否则无法实际更改文件的某些部分.

该怎么办

除非你可以进行增量同步,否则我建议首先在客户端实现一些缓存,如果它没有足够的帮助,那么就分割你的文件.