当前位置: 首页 > 面试题库 >

如何在不读取整个文件的情况下从大文件的末尾删除X字节?

祁鸿哲
2023-03-14
问题内容

在Linux中,我有一个很大的文件,文件末尾附加了一些无关的信息。例如,假设我知道一个1.6GB文件的末尾有314个字节的无关数据。

当然,将更多数据添加到文件末尾是非常容易和有效的,但是我可以怎么做才能删除它,而不必将该文件的第一部分复制到另一个文件中(或覆盖所述文件)?

编辑

我在C中看到了一些很好的建议。我希望从命令行编写脚本,但是如果没有,我会比C更倾向于在python中进行编写。

我看到python在其文件对象上有一个truncate方法,但是无论我如何使用它似乎都在破坏我的文件-我应该能够弄清楚这一点,但是当然答案仍然值得欢迎。


问题答案:

使用功能 truncate

http://linux.die.net/man/2/truncate

int truncate(const char *path, off_t length);
int ftruncate(int fd, off_t length);

truncate采用文件名
ftruncate采用打开的文件描述符

两者都将文件长度设置为,length因此它会被截断或拉长(在后一种情况下,文件的其余部分将填充为NULL / ZERO)。

[edit]
truncate(Linux shell命令)也将起作用

**SYNTAX**

truncate -s integer <filename>  
**OPTIONS**

-s number specify the new file length. If the new length is smaller than the current filelength data is lost. If the new length is greater the file is padded with 0. You can specify a magnitude character to ease large numbers:
b or B size is bytes.
k size is 1000 bytes.
K size is 1024 bytes.
m size is 10^6 bytes.
M size is 1024^2 bytes.
g size is 10^9 bytes.
G size is 1024^3 bytes.


**EXAMPLES**

To shrink a file to 10 bytes:

truncate -s 10 /tmp/foo

To enlarge or shrink a file to 345 Megabytes:

truncate -s 345M /tmp/foo

[/编辑]



 类似资料:
  • 问题内容: 是否有一种隐藏的方法可以在 不 读取整行的 情况下 从文件或类似文件的对象读取令牌?我立即拥有的应用程序(其他人的问题,不是我的问题)正在将具有几个非常长的行的大型矩阵转置,本质上是对选择单个列元素的迭代器执行操作。这个想法不是在迭代过程中将整个文件存储在内存中。 这些行是用空格分隔的ASCII十进制数字。 对于Java的Scanner类,问题可能很简单,但我没有在Python标准库中

  • 目前我正在测试PhpStorm IDE。它真的很棒,除了一个功能。它不会从文件末尾删除空行。现在删除不需要的空格,但末尾的空行不会删除。 这对我来说真的很烦人。我能改变这种行为吗?

  • 问题内容: 我目前正在使用pandas读取Excel文件并向用户显示其工作表名称,因此他可以选择他要使用的工作表。问题在于文件非常大(70列x 65k行),最多需要14s才能在笔记本上加载(CSV文件中的相同数据需要3s)。 我在熊猫中的代码是这样的: 我之前尝试过xlrd,但获得了相似的结果。这是我用xlrd编写的代码: 那么,有人能建议一种比读取整个文件更快的方法来从Excel文件中检索工作表

  • 问题内容: 我在目录()中有文件名列表。我想从所有这些文件名中删除一定数量的字符。 文件名示例: 我希望在每个文件名中删除文件扩展名前的最后5个字符。 例如: 我相信可以使用完成此操作,但是我无法确定确切的编码。就像是… …但是那行不通。抱歉,如果我选择了这些选项,则我对此没有太多经验。 问题答案: 要么 %%是bash内部操作员…

  • 我目前正在使用pandas读取Excel文件,并向用户显示其表名,以便用户选择他想要使用的表。问题是文件真的很大(70列x65K行),在笔记本上加载需要14秒(CSV文件中的相同数据需要3秒)。

  • 问题内容: 我正在尝试在JSP / Struts2中实现文件上传,但我注意到了一个奇怪的行为。我在struts.xml中以这种方式声明了将文件大小限制为1MB的操作 它工作得很好,非图像文件和1MB以上的图像都会引发错误。唯一的问题是,太大的文件在删除之前还是已完全上传到服务器的temp文件夹中。 有没有办法在达到限制后立即停止上传? 编辑: 四元数的解决方案有效,当请求超过了下一行所设置的最大值