php - 有没有更有效的编码方式(没有 mysql )
问题描述
我想从包含 20,000 到 30,000 行的文本文件中提取几百行。将这些行写入较小的(提取的)文件后,我想从较大的(源)文件中删除/删除这些行。我拼凑了一些 php 代码来完成我的开发文件的工作,但在处理较大的文件时似乎效率很低。
这是我放在一起的:
<?php
// WRITE SPECIFIED NUMBER OF LINES OF TEXT FROM SOURCE FILE TO EXTRACTED FILE
$file = fopen("extracted.txt", "w+");
flock($file, 2);
$file2read = fopen("source.txt","r+");
for ($i = 0; $i <= 9; $i++) {
$keyphrase = fgets($file2read) ;
fputs ($file, $keyphrase);
}
// SOURCE LINES HAVE BEEN WRITTEN TO EXTRACTED FILE
fclose($file2read);
flock($file, 3);
fclose($file);
// NOW PROCESS SOURCE FILE TO STRIP OUT EXTRACTED FILES AND COMPACT SOURCE FILE FOR NEXT EXTRACT
for ($i = 0; $i <= 9; $i++) {
$file2read = fopen("source.txt","r+");
$keyphrase = fgets($file2read) ;
$rows = file("source.txt");
foreach($rows as $key => $row) {
if(preg_match("/($keyphrase)/", $row)) {
unset($rows[$key]);
}
}
file_put_contents("temporary1.txt", implode("\n", $rows));
// STRIP OUT EMPTY LINES WHILE COPYING FROM MODIFIED SOURCE IMAGE (TEMPORARY1.TXT) TO TEMPORARY FILE
file_put_contents('temporary.txt',
preg_replace(
'/\R+/',
"\n",
file_get_contents('temporary1.txt')
)
);
// COPY TEMPORARY FILE TO PRODUCE UPDATED SOURCE FILE WITH EXTRACTED LINES REMOVED
copy("temporary.txt","source.txt");
} // CLOSE INITIAL 'FOR LOOP'
unlink ("temporary1.txt"); // CLEAR DISKSPACE OF TEMPORARY FILE
unlink ("temporary.txt"); // CLEAR DISKSPACE OF TEMPORARY FILE
在第一个代码块中将这些行复制到提取的文件中似乎很简单。但是删除这些行并压缩源文件看起来很丑陋并且消耗了多个循环。有没有更好的方法,不使用 mysql 数据库?
解决方案
扩展我的评论:使这个程序将输入中的行过滤到两个临时文件中,然后将临时文件移回原处。
我无法完全掌握一行是否被接受或拒绝的逻辑,所以这里用一个愚蠢的检查来代替它,检查该行是否以小写元音开头。
(另外,我写 PHP 已经有一段时间了,它可能有问题。)
<?php
$input = fopen("source.txt", "r");
$output_1 = fopen("temp1.txt", "w");
$output_2 = fopen("temp2.txt", "w");
while (($line = fgets($handle)) !== false) {
$accepted = preg_match("/^[aeiou]/", $line); // TODO: replace this logic
fwrite(($accepted ? $output_1 : $output_2), $line . "\n");
}
fclose($output_1);
fclose($output_2);
rename("temp1.txt", "extracted.txt");
rename("temp2.txt", "source.txt");
推荐阅读
- java - 图片未上传到数据库
- ios - 有没有办法忽略对 ios 的依赖的最小版本并在运行时检查它?
- python - 将 XML 数据解析为数据框
- c# - 无法让 FaceTracker 类在 HoloLens 2 上工作
- javascript - 带有查询字符串参数和 FormData 的 Vue http GET 请求
- javascript - 是否可以通过函数本身访问函数的原型对象
- python - 如何在 kivy 中使用屏幕管理器在另一个 python 文件中运行 python 文件
- flask - jinja2exceptions TemplateNotFound:带有 uwsgi 但没有烧瓶运行的 index.html
- azure - 从 AzureAD 安全的 powershell 核心 Azure 函数获取 ClaimsPrincipal/Identity
- reactjs - 如何在 83 版中检测 chrome 浏览器?