小编Tre*_*rey的帖子

使用缓冲读取器读取大型 .csv 文件,Python

我正在尝试在 python 脚本中打开大型 .csv 文件(16k 行+,~15 列),但遇到了一些问题。

我使用内置的 open() 函数打开文件,然后使用输入文件声明一个 csv.DictReader 。循环的结构如下:

for (i, row) in enumerate(reader):
     # do stuff (send serial packet, read response)
Run Code Online (Sandbox Code Playgroud)

但是,如果我使用的文件长度超过 20 行,该文件将打开,但在几次迭代后我会收到 ValueError: I/O 操作已关闭的文件。

我的想法是,我可能会耗尽内存(尽管 16k 行文件只有 8MB,而且我有 3GB 内存),在这种情况下,我希望我需要使用某种缓冲区来仅加载一次将文件存入内存。

我走在正确的轨道上吗?或者是否还有其他原因导致文件意外关闭?

编辑:大约有一半的时间我使用 11 行的 csv 运行此命令,它会给出 ValueError。错误并不总是发生在同一行

python csv enumerate bufferedreader

5
推荐指数
1
解决办法
9738
查看次数

变量重定义,嵌入式c

我正在研究嵌入式c项目,并且遇到了全局变量重定义的问题.

我已将函数声明和定义拆分为少量的.h和.c文件.其中许多函数需要访问global_vars.h中定义的全局变量.因此,在头文件的开头,#ifndef,#define部分,"global_vars.h".如果我不这样做,你可能会想到我得到了一堆未定义的变量错误.

但是,即使global_vars.h具有#ifndef _GLOBAL_VARS_H_ #define ... #endif,我也会得到所有全局变量的重定义错误.我的猜测是,当链接器尝试链接各种目标文件时,由于所有"blah_blah.h"文件中的#include"global_vars.h",它会看到重新定义.不过,我的理解是#ifndef ...处理这个问题.

我有什么东西可以俯瞰吗?

提前致谢

c embedded header redefinition

2
推荐指数
1
解决办法
3626
查看次数

在c中输入coercion:unsigned int to float

我在主机和嵌入式处理器之间进行串行通信.在嵌入式方面,我需要解析浮点和整数数据的字符串.我目前正在做的是这样的事情:

inline float32* fp_unpack(float32* dest, volatile char* str) {
    Uint32 temp = (Uint32)str[3]<<24;
    temp |= (Uint32)str[2]<<16;
    temp |= (Uint32)str[1]<<8;
    temp |= (Uint32)str[0];
    temp = (float32)temp;
    *dest = (float32)temp;

    return dest;
}
Run Code Online (Sandbox Code Playgroud)

str有四个字符,每个字符代表一个浮点字节.字符串中的字节是有序的小端.

举个例子,我试图从str中提取数字100.0.我已经验证了字符串的内容是:

s [0]:0x00,s [1]:0x00,s [2]:0x20,s [3]:0x41,

这是100.0的32位浮点表示.此外,我已经验证该函数成功将temp设置为0x41200000.但是,dest最终为0x4e824000.我知道问题来自于:*dest =(float32)temp,我希望它只是简单地将位从temp复制到dest,并使用类型转换使编译器满意.

但是,我已经意识到情况并非如此,因为操作:float x =(float)4/3实际上将4转换为4.0,即更改位.

如何将temp中的位强制转换为dest?

提前致谢

编辑:注意0x4120000作为整数是1092616192,作为一个浮点数,是0x4e82400

c floating-point integer coercion

0
推荐指数
1
解决办法
7319
查看次数