从文件中删除最后一行是一个简单的过程,只需几行代码即可完成。
// 将文件读入数组 $lines = file('file.txt'); // 从数组中弹出最后一项 array_pop($lines); // 将数组连接回字符串 $file = join('', $lines); // 将字符串写回到文件中 $file_handle = fopen('file.txt', 'w'); fputs($file_handle, $file); fclose($file_handle);
此脚本中方法的局限性在于,如果文件很大,则将整个文件传递到数组中将占用大量内存,从而有可能导致服务器崩溃。最好的方法不是执行此操作,而是从文件末尾开始直到找到第一个换行符为止。以下脚本将一次咬掉50个字符,直到找到换行符为止(而不是文件末尾的换行符)。在这一点上,循环退出,直到找到的换行符被写回到文件中为止。
// 文档名称 $filename = 'file.txt'; // 打开文件 $file_handle = fopen($filename, 'r'); // 设置循环变量 $linebreak = false; $file_start = false; // 要查看的字节数 $bite = 50; // 文件大小 $filesize = filesize($filename); // 将指针放在文件末尾。 fseek($file_handle, 0, SEEK_END); while ($linebreak === false && $file_start === false) { // 获取当前文件位置。 $pos = ftell($file_handle); if ($pos < $bite) { // 如果位置小于一口,则转到文件的开头 rewind($file_handle); } else { // 将$bite个字符移回文件 fseek($file_handle, -$bite, SEEK_CUR); } // 将文件的$bite个字符读入字符串。 $string = fread($file_handle, $bite) or die ("Can't read from file " . $filename . "."); /* If we happen to have read to the end of the file then we need to ignore * the last line as this will be a new line character. */ if ($pos + $bite >= $filesize) { $string = substr_replace($string, '', -1); } // 由于我们将fred()前进到文件中,因此需要备份$bite字符。 if ($pos < $bite) { // 如果位置小于一口,则转到文件的开头 rewind($file_handle); } else { // 将$bite个字符移回文件 fseek($file_handle, -$bite, SEEK_CUR); } // 我们读取的字符串中是否有换行符? if (is_integer($lb = strrpos($string, "\n"))) { // 将$linebreak设置为true,以便我们跳出循环 $linebreak = true; // 文件中的最后一行在换行符之后 $line_end = ftell($file_handle) + $lb + 1; } if (ftell($file_handle) == 0) { // 如果我们位于文件的开头,请跳出循环。 $file_start = true; } } if ($linebreak === true) { // 如果找到换行符,则将文件读入字符串以写入而无需最后一行。 rewind($file_handle); $file_minus_lastline = fread($file_handle, $line_end); // 关闭档案 fclose($file_handle); // 以写入模式打开文件并截断它。 $file_handle = fopen($filename, 'w+'); fputs($file_handle, $file_minus_lastline); fclose($file_handle); } else { // 关闭档案, nothing else to do. fclose($file_handle); }
该脚本使用fseek()和ftell()以小增量在文件中向后移动。我已经用从几千字节到超过100兆字节的一些文件大小进行了测试,并且可以非常快速地工作。比将文件转换为数组快得多。
问题内容: 我打算使用Java擦除文本文件中的最后一行;但是,下面的代码将删除所有内容。 问题答案: 如果要从文件中删除最后一行而不创建新文件,则可以执行以下操作: 从倒数第二个字节开始,查找换行符,然后继续向后搜索,直到找到一个。然后在该换行符之后截断该文件。 如果最后一个字符是换行符(即最后一行的末尾),则从第二个最后一个字节而不是最后一个字节开始。
我一直在使用pandas导入CSV,但每次尝试使用它时,我都会得到一个随机的额外行,这会导致代码中的错误。我如何完全抹去这一行? 我用来导入它的代码是:import itertools import copy import networkx as nx import pandas as pd import Matplotlib.pyplot as plt import csv 我的表是一个简单的I
问题内容: 在互联网上浏览后,我来了。 假设我已经制作了一个文本文件,内容为: 好吧,我想从此文本文件中删除最后一个字符(在本例中为)。 因此,现在文本文件应如下所示: 但是我不知道该怎么做。 我所需要的或多或少是对HDD上文本文件的单个退格功能。 这需要在Linux上工作,因为这就是我正在使用的。 问题答案: 用于从末尾寻找1个位置,然后用于删除文件的其余部分: 这对于单字节编码工作正常。如果您
问题内容: 如何使用python删除文件的最后一行? 输入文件示例: 输出文件示例: 我创建了以下代码来查找文件中的行数-但我不知道如何删除特定的行号。 问题答案: 您可以使用上面的代码,然后: 这将为您提供包含除最后一行以外的所有行的行数组。
问题内容: 我有一个名为的文件和一个名为的字符串,我知道该字符串是该文件的完整行,但是我不知道其行号,并且我想从文件中删除它,该怎么办? 可以使用awk吗? 问题答案:
我想从名为"fajlovi"的文件夹中删除文件。多个和单个删除应该工作。但是它会删除文件夹中的第一个文件(文件夹中文件数组中的0位置)。如果我检查任何文件,它将删除前4个文件,而不是我检查的文件。下面是代码: 1.这是页面的截图: 2.然后我检查要删除的图像: 4.再次进入页面后,我们可以看到错误的图像被删除: