问题标签 [linecache]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
1447 浏览

python - 如何以不同的顺序有效地读取Python中的大文本文件行:a)每次随机行,b)从中间开始......?

我有一个大文本文件(500 万到 1000 万行)。每行有 10 到 5,000 个字母数字项目,它们之间用空格或逗号分隔。每行以换行符结束。行数在运行前是已知的,并且文本文件在运行时不会改变。

每次运行代码,都会传递 50-200个搜索列表,每个搜索列表包含 2-10 个项目(单词)。对于这些搜索列表中的每一个,我想在文本文件中找到x行,其中至少包含该列表中的一项。行数x范围为 5-10 行,并在运行时设置。匹配不区分大小写并且必须在单词边界上精确(例如,“foo”匹配“,foo”但不匹配“foobar”)。

每个搜索列表都有以下三种搜索顺序策略之一:

  • 正常。从第一行开始,按连续顺序逐行搜索,直到找到x行或到达最后一行。

  • 随机。从文本文件中随机选择行。继续前进,直到找到x行或完成对每一行的搜索。

  • 桶范围。首先搜索最高优先级范围的行,然后是下一个最高优先级范围,然后是下一个,等等。例如,搜索范围优先级可能是首先查看行 1,000,000 到 1,499,999,然后是行 0 到 999,999,然后是行1,500,000 到 2,199,999 等。可以有 3 到 20 个桶,每个桶涵盖 100,000 到 5,000,000 行的范围。桶数和行号范围在运行时给出。在每个范围内,连续搜索。搜索直到找到x行或到达最后一个桶的末尾。

这是我为“正常搜索”编写的内容[此测试代码检查文件末尾的所有行,而不会在x行之后停止;在最终版本中,在为搜索列表找到x 个匹配项后,它会停止并继续前进到下一个搜索列表]:

此“正常搜索”代码有效。在我尝试过的方法中,它似乎是最快的,但我是 Python 新手,我想一定有更好的方法(速度/效率)来做到这一点。

[根据评论更新以更好地解释不同搜索策略的原因] 项目高度倾斜。使用数据,我发现大约一半的搜索将在 10,000 行之前完成,40% 可能需要几百万行才能找到足够的匹配项,而 10% 不会在整个文本文件中找到足够的匹配项。每行中的项目与它们所在的行无关,但行的范围相似(即 100,000-500,000 行相关,1,500,000-1,750,000 行相关等)。对于给定的搜索列表,代码可以运行多次,并且对于每次运行,优先级可能是关注不同范围的行。如果整个文本文件只有x行与特定搜索列表中的项目,那么结果将始终是那些x行。但是对于许多搜索列表,有2x10x100,000x行匹配,并且在不同的时间,我想选择不同的行。在某些时候,一个特定的范围可能是优先级,在其他时候随机采样是最好的,有时只从头开始找到前x行就可以了,因此“正常”、“随机”和“桶”搜索策略。

我真的很感激任何关于“随机”和“桶”的想法,因为我不确定如何最好地有效地接近它们。我玩弄linecache, itertools islice, readlines(根据@Martin Thoma 在这个答案中,readlines速度非常快),以及修改上面的代码,但我对“随机”和“桶”的尝试都是笨拙、低效的,我知道我不知道什么是最好的:)。

有什么建议么?谢谢。

0 投票
1 回答
19 浏览

string - 将来自两个不同文件的输入连接到一个单独的文件中

我想生成以下行

假设第一个数字是n,第二个数字是n+1,的内容\textarabic是从获得的,从的f_nusoos内容。两个文件的行数相同。\textttf_keys

我创建了一个 Python3 脚本,它应该可以得到我想要的,但我最终得到了新的行符号 ( \n)。

这是我到目前为止所拥有的,

执行后的内容content.tex是,

然而,我的期望是,

问题似乎是在texttt{CONTENT. 我不知道这是为什么。

内容f_nusoos.txt

内容f_keys.txt

0 投票
1 回答
1705 浏览

python - 捕捉线并用python修改它

我是python的新手。我目前正在尝试修改文件中的一行,这是在使用 linecache 捕获此行之后。

示例:

然后,我想修改该行的内容:

我有这个错误:

IndexError:列表索引超出范围

我尝试了许多格式类型,但不幸的是它仍然无法正常工作。你有什么建议吗:)

谢谢你。

0 投票
1 回答
588 浏览

python - 从今天开始运行 100 天的 Python 代码

从今天开始,我想在代码行下面运行 200 天。假设今天是第一天,所以我的代码是-

假设今天是第二天,所以我的代码是-

假设今天是第 3 天,所以我的代码变为 -

我希望每天计算 1,2,3,4,5......200 以上。我不希望循环运行 200 天。

我只需要从 python 日期系统或任何其他计数系统中获取 1,2,3,4,5......200 个计数。

0 投票
1 回答
1707 浏览

python - Python 行缓存不起作用

在 Python 中,我有一个问题,每当我使用模块中的getline()函数时linecache,它根本不起作用。假设这是我在名为 的文本文档上的内容hi.txt

并说这是我在同一文件夹/目录中的 python 程序上的内容:

它什么也不会打印,只是一些空行。

0 投票
1 回答
112 浏览

python - while 循环中的 open 语句有问题

我剪切了我试图完成的脚本的一部分。我期待mylineS.split()[0]每次迭代后都有新的结果。outS.txt并且outT.txt是每次迭代的结果,commandC并且每次迭代的结果都不同。但是mylineS.split()[0]会为每次迭代带来第一个结果。

我猜我的方法有问题,有什么想法吗?

commandC 是subprocess.run(commandC, shell=True). 我在写底部。

0 投票
2 回答
86 浏览

python - 连接来自 2 个不同行的 2 个字符串(来自文本文件) - 使用 linecache

我正在尝试使用 linecache 连接来自两个不同行的 2 个字符串,但是当我尝试时,输出总是在 2 行而不是 1 行。

文件中的文字:

你好

世界

代码:

结果:

结果(消息)是:两行hello world (第一行是hello,第二行是world)

这不是我想要的,我想要这个:hello world on a single line

任何帮助,将不胜感激!:-)

PS对不起我的英语!

0 投票
1 回答
61 浏览

python - 试图写“饼干”-OFC 它不起作用,但我认为它可以 xD

我对 python 很陌生,我尝试编写“cracker”(不是真的,只是一个编写所有可能组合的程序)。

我使用了 linecache,然后只是 while 循环(太多了)。

这个想法是用 aZ 和 0-9 个字符制作一个字典,然后使用 linecache 获取字符并将它们放在一起

(它只改变了 2 个字符,但是当我尝试 8 个字符时......)

由于我是 python 新手,我并不是一个真正有意图的朋友,但不知何故我让它工作了,但是......

问题是它永远不会:

..................................................... .........................................

0 投票
1 回答
655 浏览

python - Python:linecache.getline 未按预期工作

我有一个包含许多子目录的目录。

在目录的底部有一些 .txt 文件,我需要从中提取第 2 行。

我能够成功解析所有目录并找到每个文本文件。但是 linecache.getline 只返回换行符(应该有来自该行文件的数据)。使用

也不解决这个问题。

我能够正确打印出每个目录中的文件名,但是将它们传递给 linecache 似乎可能是问题所在。linecache.getline(file, lineno.)如果我只是在当前目录中的 1 个 .txt 文件上运行脚本,我就可以成功使用。

0 投票
2 回答
44 浏览

python - 从文本文件中检索一个变量时比较 2 个变量

我正在尝试编写将变量b与使用linecache.getline从文本文件中检索的值进行比较的代码

问题是它永远不会打印我们的“ITS WORKING”,因为这些值永远不会匹配,即使它们匹配:-(

文本文件:在文本文件中只有一个字符及其“a”

这是代码: