标签: enumerate

使用缓冲读取器读取大型 .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
查看次数

\table 中的 \enumerate 乳胶环境

我想在 \enumerate 环境中插入一个 \table ,我有这样的事情:

\begin{enumerate}
    \item Item 1.
    \item Item 2.
    \item \begin{table}[htbp]
        \textbf{\caption{Table1 Caption}}
        \centering  
        \begin{tabular}{c c}
        \hline\hline
        Value 1 & Value 2\\
        \hline
        r1c1 & r2c2\\
        r2c1 & r2c2\\
        r3c1 & r3c2\\           
        \hline
        \end{tabular}
        \label{table1}
        \end{table}

    \item \begin{table}[htbp]
        \textbf{\caption{Table 2 Caption}}
        \centering
        \begin{tabular}{ccc}
        \hline\hline
        Value 1 & Value 2 & Value 3\\
        \hline
        r1c1 & r1c2 & r1c3\\
        r2c1 & r2c2 & r2c3\\
        r3c1 & r3c2 & r3c3\\
        \end{tabular}
        \label{table2}
    \end{table}

    \item \ref{table1} and \ref{table2}
\end{enumerate}
Run Code Online (Sandbox Code Playgroud)

但是当我编译乳胶文档时,\enumerate …

latex enumerate

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

如何在枚举列表中的项目之间放置数字?

我有一个枚举列表,有些项目有数字。我这样写:

\begin{enumerate}
    \item Estado da arte: 
    \item Levantar os requisitos
    \item Com o microcontrolador
\ref{figurametodo3}.    
    \begin{figure}[h!]
        \begin{center}
            \includegraphics[scale=0.6]{./dados/figuras/metodo_3}
            \caption{Sistema para leitura da identificação de uma Tag} 
            \label{figurametodo3}
        \end{center}
    \end{figure}


    \item Estudar

    \begin{figure}[h]
    \begin{center}
        \includegraphics[scale=0.4]{./dados/figuras/metodo_4}
        \caption{Comunicação entre o microcontrolador e o celular} 
        \label{figurametodo4}
    \end{center}
\end{figure}

    \item Desenvolver 

    \begin{figure}[h]
    \begin{center}
        \includegraphics[scale=0.6]{./dados/figuras/metodo_final}
        \caption{Comunicação entre celulares e servidor} 
        \label{figura22}
    \end{center}
\end{figure}

\end{enumerate}
Run Code Online (Sandbox Code Playgroud)

但它将列表下方的所有数字对齐,超出了我想要的位置。我希望我的数字保持在你的项目之下。名单内。

latex list enumerate

5
推荐指数
2
解决办法
2万
查看次数

为什么“for i in range(len(arr))”被认为是非Pythonic?

编辑:我想澄清一下,我在这里询问明确需要索引的情况。我知道for item in items在不需要的时候这样做会更好。我有一个长期的习惯,将列表项视为my_list[i]arr[i]。我发现看到彼此相邻的列表名称和索引非常清晰且有帮助。所以我的问题实际上是,改变我对指数和价值的思考方式以适应工作方式是否有任何优势enumerate

正如标题所说。我读过很多答案都说for i in range(len(arr))不好,但没有听到一个很好的理由来解释为什么会出现这种情况。一种说法是它“非 Pythonic”,但与 c 风格版本相比,它表面上看起来相当 Pythonic。

由于enumerate有一个有时不需要的额外参数,我对它的优点感到困惑,因为增加的简单性似乎并不能得到保证。我想更多地了解为什么我应该避免for i in range(len(arr)),或者这实际上是否只是取决于个人喜好。

python for-loop enumerate range

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

枚举导致 mypy 类型不兼容错误

下面的代码:

from typing import Union


def process(actions: Union[list[str], list[int]]) -> None:
    for pos, action in enumerate(actions):
        act(action)


def act(action: Union[str, int]) -> None:
    print(action)
Run Code Online (Sandbox Code Playgroud)

生成 mypy 错误: Argument 1 to "act" has incompatible type "object"; expected "Union[str, int]"

但是,当删除枚举函数时,输入就可以了:

from typing import Union


def process(actions: Union[list[str], list[int]]) -> None:
    for action in actions:
        act(action)


def act(action: Union[str, int]) -> None:
    print(action)
Run Code Online (Sandbox Code Playgroud)

有谁知道枚举函数正在做什么来影响类型?这是 python 3.9 和 mypy 0.921

python typing enumerate mypy

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

枚举对象上的python dict函数

如果我有一个枚举对象x,为什么要执行以下操作:

dict(x)
Run Code Online (Sandbox Code Playgroud)

清除枚举序列中的所有项目?

python dictionary enumerate

4
推荐指数
1
解决办法
9173
查看次数

如何从可迭代的保留原始索引中枚举所选元素?

我遇到了选定元素上使用枚举器形成可迭代(即序列迭代器或类似物)的情况,并希望返回原始索引而不是默认索引count,从 开始0一直到len(iterable) - 1.

一种非常幼稚的方法是声明一个名为的新生成器对象_enumerate()

>>> def _enumerate(iterable, offset = 0, step = 1):
    index = offset
    for element in iterable:
        yield index, element
        index += step
Run Code Online (Sandbox Code Playgroud)

...一个新的列表对象months

>>> months = ["January", "February", "March", "April", "May", "June",
              "July", "August", "September", "October", "November", "December"]
Run Code Online (Sandbox Code Playgroud)

使用蟒蛇在积聚enumerate功能会产生这种输出[5::2]切片:

>>> …
Run Code Online (Sandbox Code Playgroud)

python generator enumerate python-3.x

4
推荐指数
1
解决办法
2172
查看次数

嵌套列表的嵌套列表

我有一个包含主密钥和列表列表的列表,其中每个封闭列表的第一个值(如'key_01')应该是相应值的子键(如'val_01', 'val_02').数据显示在这里:

master_keys = ["Master_01", "Master_02", "Master_03"]
data_long = [[['key_01','val_01','val_02'],['key_02','val_03','val_04'], ['key_03','val_05','val_06']],
           [['key_04','val_07','val_08'], ['key_05','val_09','val_10'], ['key_06','val_11','val_12']],
           [['key_07','val_13','val_14'], ['key_08','val_15','val_16'], ['key_09','val_17','val_18']]]
Run Code Online (Sandbox Code Playgroud)

我希望将这些列表组合成字典字典,如下所示:

master_dic = {
"Master_01": {'key_01':['val_01','val_02'],'key_02': ['val_03','val_04'], 'key_03': ['val_05','val_06']}, 
"Master_02": {'key_04': ['val_07','val_08'], 'key_05': ['val_09','val_10'], 'key_06': ['val_11','val_12']}, 
"Master_03": {'key_07': ['val_13','val_14'], ['key_08': ['val_15','val_16'], 'key_09': ['val_17','val_18']}
}
Run Code Online (Sandbox Code Playgroud)

到目前为止我得到的是子词:

import itertools

master_dic = {}
servant_dic = {}
keys = []
values = []
for line in data_long:
    for item in line:
        keys.extend(item[:1])
        values.append(item[1:])
servant_dic = dict(itertools.izip(keys, values))
Run Code Online (Sandbox Code Playgroud)

正如预期的那样,它会输出一本字典.

servant_dic = {
'key_06': ['val_11','val_12'], …
Run Code Online (Sandbox Code Playgroud)

python dictionary list enumerate

4
推荐指数
1
解决办法
97
查看次数

在 numpy 数组中更改值

所以我有一个 2D numpy 数组 (256,256),包含 0 到 10 之间的值,它本质上是一个图像。我需要删除 0 值并将它们设置为 NaN,以便我可以使用特定库 (APLpy) 绘制数组。但是,每当我尝试更改所有 0 值时,其他一些值都会被更改,在某些情况下会更改为原始值的 100 倍(不知道为什么)。

我正在使用的代码是:

for index, value in np.ndenumerate(tex_data):
    if value == 0:
        tex_data[index] = 'NaN'
Run Code Online (Sandbox Code Playgroud)

其中 tex_data 是我需要从中删除零的数据数组。不幸的是,我不能只对不需要的值使用掩码,因为据我所知,除了掩码数组之外,APLpy 不会。

无论如何我可以将 0 值设置为 NaN 而不更改数组中的其他值?

python arrays numpy enumerate

4
推荐指数
1
解决办法
1403
查看次数

多线程 Julia 显示枚举迭代器错误

为什么这段非常简单的代码会在 Julia 1.1 中导致错误?

Threads.@threads for (index,value) in enumerate([0.1,0.2,0.3])
    println(value^index)

end
Run Code Online (Sandbox Code Playgroud)

显示的错误是:

Error thrown in threaded loop on thread 0: MethodError(f=typeof(Base.unsafe_getindex)(), args=(Base.Iterators.Enumerate{Array{Float64, 1}}(itr=Array{Float64, (3,)}[0.1, 0.2, 0.3]), 1), world=0x00000000000069dc)
Error thrown in threaded loop on thread 1: MethodError(f=typeof(Base.unsafe_getindex)(), args=(Base.Iterators.Enumerate{Array{Float64, 1}}(itr=Array{Float64, (3,)}[0.1, 0.2, 0.3]), 3), world=0x00000000000069dc)
Run Code Online (Sandbox Code Playgroud)

我想在使用迭代器的Threads.@threads地方使用更复杂的代码enumerate

multithreading iterator for-loop enumerate julia

4
推荐指数
1
解决办法
509
查看次数