最近我一直在制作一个python脚本,用于从大文本文件(> 1 GB)中提取数据.问题基本上总结为从文件中选择文本行,并从一些数组中搜索它们的字符串(此数组中最多可包含1000个字符串).这里的问题是我必须找到字符串的特定匹配项,并且该字符串在该文件中可能会出现无限次.此外,还需要一些解码和编码,这会进一步减慢脚本速度.代码看起来像这样:
strings = [a for a in open('file.txt')]
with open("er.txt", "r") as f:
for chunk in f:
for s in strings
#do search, trimming, stripping ..
Run Code Online (Sandbox Code Playgroud)
我的问题是:有没有办法优化这个?我尝试了多处理,但它很少(或至少我实现它的方式)这里的问题是这些块操作不是独立的,strings列表可能在其中一个中被改变.任何优化都会有所帮助(字符串搜索算法,文件读取等)我尽可能多地做了关于循环中断的事情,但它仍然运行得很慢.
我一直在编写一个C应用程序,我需要x86汇编语言.我对汇编很新,下面的代码片段会导致递归:
unsigned int originalBP;
unsigned fAddress;
void f(unsigned short aa) {
printf("Function %d\n", aa);
}
unsigned short xx = 77;
void redirect() {
asm {
pop originalBP
mov fAddress, offset f
push word ptr xx
push fAddress
push originalBP
}
}
Run Code Online (Sandbox Code Playgroud)
如果我打电话redirect,它会反复输出:"功能1135"
首先,以下是有关执行此代码的环境的一些信息:
这是我对上面代码应该做什么的期望(这很可能是错误的罪魁祸首):
originalBP; 我相信这个值实际上是当前函数的地址,即redirectf参数值(值xx)推送到堆栈f堆栈的地址(因为只有一个段,只需要偏移)redirect当然,如果这是正确的流程,递归将是明显的(除了打印1135而不是7的部分).但有趣的是,对于没有参数的函数执行相同操作只会产生一行输出,即:
unsigned int originalBP;
unsigned fAddress;
void f() {
printf("Function");
}
void redirect() {
asm …Run Code Online (Sandbox Code Playgroud)