【问题标题】:Python - Simplest method of stripping the last byte from a file?Python - 从文件中删除最后一个字节的最简单方法?
【发布时间】:2012-05-23 12:13:49
【问题描述】:

我想制作一个脚本来获取文件,去掉文件的最后一个字节。该文件可以是任何内容,而不仅仅是文本。

我一直在使用 seek() 和 tell() 方法,但我找不到处理允许我这样做的文件的方法。

我认为它应该相对微不足道,但也许 Python 不是一个合适的工具?

fileStripped = file[:-4]
newpath = path + "\\" + fileStripped 
if not os.path.exists(newpath): 
 os.makedirs(newpath)
with open(fname, "r") as f:
 f.seek (0, 2)           # Seek @ EOF
 fsize = f.tell()        # Get Size
 f=f.read
 f=f[:fsize-2]

此方法出错,并告诉我无法下标f=f[:fsize-2]

【问题讨论】:

  • 您要就地执行还是将其写入新文件?
  • @Jay:f=f.read 应该是 f=f.read()。您当前要求它做的是为 read 方法下标。
  • 在 unix 上你可以简单地做truncate -s -1 filename
  • @MRAB 哦!太好了,很好的收获,谢谢:)

标签: python file truncate


【解决方案1】:

从末尾开始寻找一个字节,然后截断。

f = open(..., 'r+')
f.seek(-1, os.SEEK_END)
f.truncate()
f.close()

【讨论】:

  • 那将修改现有文件 - 他想将截断的数据写入新文件。
  • 嗯,先复制很容易。并且更改最后是一个字节,因此您无需费劲就可以节省任何费用。
  • 谢谢,这种方法可以,但我选择的 TM 是正确的,因为它包含复制步骤。感谢您的宝贵时间。
【解决方案2】:

使用shutil.copyfileobj 复制文件,然后通过寻回一个字节并截断文件来删除最后一个字节:

with open(srcfile, 'r') as fsrc:
    with open(destfile, 'w+') as fdest:
        shutil.copyfileobj(fsrc, fdest)
        fdest.seek(-1, os.SEEK_END)
        fdest.truncate()

【讨论】:

  • Ack,当您知道如何操作时,它就变得如此简单!谢谢你。这是完美的。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-02-20
  • 2019-06-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-06-26
相关资源
最近更新 更多