最近我一直在制作一个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列表可能在其中一个中被改变.任何优化都会有所帮助(字符串搜索算法,文件读取等)我尽可能多地做了关于循环中断的事情,但它仍然运行得很慢.
这个问题听起来令人困惑,但看看:
这样我们就可以获得第一列(col1):
select distinct maker
from product
Run Code Online (Sandbox Code Playgroud)
第二列(col2):
select distinct type,maker
from product
Run Code Online (Sandbox Code Playgroud)
所以现在我需要从col1和col2获得所有可能的组合.有什么建议吗?
不久,这个:
A f1
B f2
Run Code Online (Sandbox Code Playgroud)
应该成为这样的:
A f1
A f2
B f1
B f2
Run Code Online (Sandbox Code Playgroud)
PS此查询不会返回我需要的内容.
select distinct A.maker, B.type
from product as A
Run Code Online (Sandbox Code Playgroud) 我创建了以下类,以一种以内存效率的方式在平面上存储可变点 - 我需要一个可变的等价物namedtuple('Point', 'x y').由于实例字典很大,我想我会选择__slots__:
from collections import Sequence
class Point(Sequence):
__slots__ = ('x', 'y')
def __init__(self, x=0, y=0):
self.x = x
self.y = y
def __getitem__(self, item):
return getattr(self, self.__slots__[item])
def __setitem__(self, item, value):
return setattr(self, self.__slots__[item], value)
def __repr__(self):
return 'Point(x=%r, y=%r)' % (self.x, self.y)
def __len__(self):
return 2
Run Code Online (Sandbox Code Playgroud)
在Python 3上测试时,一切似乎都没问题:
>>> pt = Point(12, 42)
>>> pt[0], pt.y
(12, 42)
>>> pt.x = 5
>>> pt
Point(x=5, y=42)
>>> pt.z = 6
Traceback …Run Code Online (Sandbox Code Playgroud) 我正在尝试在 Python 中解码 Novatel GPS 流,并且我已对同步、标头和有效负载的所有组件进行了排序,但我无法复制用作消息一部分的 CRC32。用于生成附加在消息上的 CRC 的算法用 c 编写如下:
#include <iostream>
#include <string>
using namespace std;
#define CRC32_POLYNOMIAL 0xEDB88320L
//#define CRC32_POLYNOMIAL 0x04C11DB7L
unsigned long CRC32Value(int i)
{
int j;
unsigned long ulCRC;
ulCRC = i;
for (j = 8; j > 0; j--)
{
if (ulCRC & 1)
ulCRC = (ulCRC >> 1) ^ CRC32_POLYNOMIAL;
else
ulCRC >>= 1;
}
return ulCRC;
}
unsigned long CalculateBlockCRC32(
unsigned long ulCount,
unsigned char *ucBuffer)
{
unsigned long ulTemp1;
unsigned long …Run Code Online (Sandbox Code Playgroud) 我有一个问题,我在思考;如果 C++ BOOST 库中有任何宏、功能,它将在所有测试用例之后运行一次函数。
我想运行一个函数,该函数将创建一个没有 json 文件的函数。已执行的测试,没有。通过测试的数量和数量。所有测试。所以我有这个问题,因为我必须使用以特定方式构建的文件:
f1()
f2()
f3()
BOOST_AUTO_TEST_CASE(f1){}
BOOST_AUTO_TEST_CASE(f2){}
BOOST_AUTO_TEST_CASE(f3){}
所以我无法创建 main() 函数来为我做到这一点,因为我收到一个错误,表明 /boost/test/unit_test.hpp 中有一个先前的声明。
先感谢您。问候。
我需要在C中实现Shell排序并使用优化版本(其中间隙首先设置为数组/ 2的大小,然后将此数字重复除以2.2).问题是答案并不总是完全排序,我不确定这是因为我的代码中的某些逻辑错误还是Shell排序的一些缺点.
这是我的代码:
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include <time.h>
#define MAX 7
void shellSort(int *a, int size);
void insert(int *a, int next_pos, int gap);
void shellSort(int *a,int size)
{
int gap = floor(size/2);
int next_pos;
while (gap>0)
{
for(next_pos = gap; next_pos < size; next_pos++)
insert(a, next_pos, gap);
if(gap == 2)
gap = 1;
else
gap = (int)(gap/2.2);
}
}
void insert(int *a, int next_pos, int gap)
{
int value = a[next_pos];
while(next_pos >= gap && a[next_pos] < …Run Code Online (Sandbox Code Playgroud) 我regex.h在C中使用POSIX正则表达式来计算英语文本片段中短语的出现次数.但返回值regexec(...)仅表示是否找到匹配项.所以我尝试使用nmatch和matchptr找到不同的外观,但是当我打印出匹配时matchptr,我刚收到第一个短语的第一个索引出现在我的文本中.
这是我的代码:
#include <sys/types.h>
#include <regex.h>
#include <stdio.h>
#define MAX_MATCHES 20 //The maximum number of matches allowed in a single string
void match(regex_t *pexp, char *sz) {
regmatch_t matches[MAX_MATCHES];
if (regexec(pexp, sz, MAX_MATCHES, matches, 0) == 0) {
for(int i = 0; i < MAX_MATCHES; i++)
printf("\"%s\" matches characters %d - %d\n", sz, matches[i].rm_so, matches[i].rm_eo);
}
else {
printf("\"%s\" does not match\n", sz);
}
}
int main(int argc, char* argv[]) …Run Code Online (Sandbox Code Playgroud) 所以我是一个新手,所以请软一点.
我已经创建了一个2D数组,60x30并希望通过执行双循环来在屏幕上将其显示为网格.我正在使用一个简单的字符'.' 对于网格的每个插槽只是为了测试.
char FrameBuffer[29][59];
for (int i = 0; i <= 29; i++)
{
for (int j = 0; j <= 59; j++)
{
FrameBuffer[i, j] = '.';
printf("%c ", FrameBuffer[i,j]);
}
printf("\n");
}
Run Code Online (Sandbox Code Playgroud)
但是,每当我尝试为我的2D数组中的位置赋值时,例如
FrameBuffer[0,1] = '.',
Run Code Online (Sandbox Code Playgroud)
我遇到了一个错误:
Expression must be a modifiable lvalue
Run Code Online (Sandbox Code Playgroud) 我在 cppreference 上找到了
_Atomic ( type-name ) (自 C11 起)
用作类型说明符;这指定了一个新的原子类型
_Atomic type-name (2)(自 C11 起)
用作类型限定符;这指定类型名称的原子版本。在此角色中,它可以与 const、volatility 和 limit 混合使用),尽管与其他限定符不同,类型名称的原子版本可能具有不同的大小、对齐方式和对象表示形式。
那么使用_Atomic(int)而不是_Atomic int
保证它的大小相同int或不同吗?
在 Ex 中使用限定符_Atomic
:
_Atomic(volatile int)
Run Code Online (Sandbox Code Playgroud)
抛出错误,但像这样使用它:
_Atomic(volatile _Atomic(int)*)
Run Code Online (Sandbox Code Playgroud)
才不是; 这是标准行为吗?
我注意到原子函数(例如:atomic_store、atomic_load、atomic_compare_exchange_weak)可以在传递的类型不为_Atomic类型的情况下工作,并且我仍然可以毫无问题地管理竞争条件。这是标准行为吗?它有缺点或导致任何错误吗?
7.24.2.2“ memmove功能”:
该
memmove函数将n字符从指向的对象复制到指向s2的对象s1。复制发生就好像n从对象人物指向s2首先拷贝到一个临时数组n字符不重叠的对象指向s1和s2,然后n从临时数组字符复制到对象指向s1
因此,如果我选择使用(file_size = 32K)移动大小为32K的缓冲区
memmove(io_Buffer, io_Buffer+17, file_size);
Run Code Online (Sandbox Code Playgroud)
临时缓冲区的大小不是32K吗?
题
程序可以自行分配动态内存吗?它会在那一行中分配和释放内存吗?