GVKun编程网logo

只能通过csv阅读器迭代一次(利用csv.reader函数读取的数据存储类型是)

8

在本文中,我们将为您详细介绍只能通过csv阅读器迭代一次的相关知识,并且为您解答关于利用csv.reader函数读取的数据存储类型是的疑问,此外,我们还会提供一些关于bash–循环只在主体中使用`ss

在本文中,我们将为您详细介绍只能通过csv阅读器迭代一次的相关知识,并且为您解答关于利用csv.reader函数读取的数据存储类型是的疑问,此外,我们还会提供一些关于bash – 循环只在主体中使用`ssh`迭代一次、c# – 只能通过特定方法设置属性、CSV阅读器行为,无和空字符串、CSV阅读器(Python)中的“行包含NULL字节”的有用信息。

本文目录一览:

只能通过csv阅读器迭代一次(利用csv.reader函数读取的数据存储类型是)

只能通过csv阅读器迭代一次(利用csv.reader函数读取的数据存储类型是)

因此,我基本上有一个非常长的字符串列表,以及一个包含一列字符串和一列数字的CSV文件。我需要遍历非常长的字符串列表,对于每个字符串,遍历CSV文件的行,检查CSV第一列中的每个字符串,以查看它是否出现在我的字符串中,如果确实存在,则添加在另一列中的数字。一个最小的例子是

import csvsList = [''a cat'', ''great wall'', ''mediocre wall'']vals = []with open(''file.csv'', ''r'') as f:    r = csv.reader(f)    for w in sList:        val = 0        for row in r:            if row[0] in w:                val += 1        vals.append(val)

我可能会使用的CSV文件示例可能是

a, 1great, 2

当然csv.reader(f)创建一个可迭代的对象,我只能循环一次。我在其他地方看到过使用itertools的建议,但是我发现的所有建议都是针对涉及循环访问CSV文件几次(通常只有两次)的问题。如果我尝试使用它多次遍历CSV,我不确定这对内存消耗意味着什么,总的来说,我只是想知道解决此问题的最聪明方法。

答案1

小编典典

您需要“重置”文件迭代器:

import csvsList = [''a cat'', ''great wall'', ''mediocre wall'']vals = []with open(''data.csv'', ''r'') as f:    r = csv.reader(f)    for w in sList:        val = 0        f.seek(0)  #<-- set the iterator to beginning of the input file        for row in r:            print(row)            if row[0] in w:                val += 1        vals.append(val)

bash – 循环只在主体中使用`ssh`迭代一次

bash – 循环只在主体中使用`ssh`迭代一次

参见英文答案 > ssh breaks out of while-loop in bash                                     2个
我经常看到与……基本相同的问题

当我在循环体中调用ssh时,我的while循环只迭代一次.

while read -r line; do
    ssh somehost "command $line"
done < argument_list.txt

解决方法

ssh也从标准输入读取,因此第一次调用ssh会在下一次read调用之前使用其余的argument_list.txt.要修复,请使用其中任何一个重定向ssh的标准输入/ dev / null

ssh somehost "command $line" < /dev/stdin

要么

ssh -n somehost "command $line"

如果ssh确实需要从标准输入读取,则不希望它从argument_list.txt中读取更多数据.在这种情况下,您需要为while循环使用不同的文件描述符.

while read -r line <&3; do
    ssh somehost "command $line"
done 3< argument_list.txt

bash和其他一些shell也允许read使用-u选项来指定文件描述符,有些人可能会发现它更具可读性.

while read -r -u 3 line; do
    ssh somehost "command $line"
done 3< argument_list.txt

c# – 只能通过特定方法设置属性

c# – 只能通过特定方法设置属性

我正在尝试制作一个化学方程式平衡器.为此,我创建了一个类Element:

class Element
{
    public elemEnum ElemType {get; set;}
    public double Amount {get; set;} // How many atoms of this type in the formula
}

* elemEnum是所有化学元素的枚举.

我想让ElemType的集合解析一个字符串到枚举,但由于set只能接受与value相同类型的值,所以我决定添加一个方法:

public void SetElemType(string type)
{
    this.ElemType = (elemEnum)Enum.Parse(typeof(elemEnum),type);
}

是否有选项可以让SetElemType方法只能设置ElemType属性,而不必将其设为私有并添加GetElemType方法?

解决方法

由于评论中最明显的解决方案尚未写成答案:

使用private setter.

class Element
{
    public ElemEnum ElemType {get; private set;}
    public double Amount {get; set;}

    public void SetElemType(string type)
    {
        this.ElemType = (ElemEnum)Enum.Parse(typeof(ElemEnum),type);
    }
}

这样,ElemType只能在您自己的类中设置.

CSV阅读器行为,无和空字符串

CSV阅读器行为,无和空字符串

我想None在使用Python的csv模块在Python数据结构和csv表示形式之间来回切换时区分和空字符串。

我的问题是,当我运行时:

import csv, cStringIOdata = [[''NULL/None value'',None],        [''empty string'','''']]f = cStringIO.StringIO()csv.writer(f).writerows(data)f = cStringIO.StringIO(f.getvalue())data2 = [e for e in csv.reader(f)]print "input : ", dataprint "output: ", data2

我得到以下输出:

input :  [[''NULL/None value'', None], [''empty string'', '''']]output:  [[''NULL/None value'', ''''], [''empty string'', '''']]

当然,我可以使用datadata2区分None和清空字符串,例如:

data = [d if d!=None else ''None'' for d in data]data2 = [d if d!=''None'' else None for d in data2]

但这会部分破坏我对csv模块的兴趣(在C中实现快速反序列化/串行化,尤其是在处理大型列表时)。

是否有一个csv.Dialect或参数csv.writer,并csv.reader能够使他们之间的区别'''',并None在此用例?

如果不是,是否有兴趣实施补丁csv.writer以实现这种来回交互?(可能是Dialect.None_translate_to默认设置的参数,''''以确保向后兼容)

答案1

小编典典

该文档建议您无法实现:

为了尽可能容易地与实现DB API的模块接口,将值None写入空字符串。

这在writer该类的文档中,表明所有方言都适用,这是csv模块的固有限制。

我会支持更改此代码(以及csv模块的其他各种限制),但可能是人们希望将此类工作分流到另一个库中,并使CSV模块保持简单(或至少如此简单)照原样)。

如果您需要更强大的文件读取功能,则可能需要查看numpy,scipy和pandas中的CSV读取功能,我记得其中有更多选择。

CSV阅读器(Python)中的“行包含NULL字节”

CSV阅读器(Python)中的“行包含NULL字节”

我正在尝试编写一个程序,该程序查看.CSV文件(input.csv)并仅重写以某个元素(corrected.csv)开头的行,如文本文件(output.txt)中所列。

这是我的程序现在的样子:

import csvlines = []with open(''output.txt'',''r'') as f:    for line in f.readlines():        lines.append(line[:-1])with open(''corrected.csv'',''w'') as correct:    writer = csv.writer(correct, dialect = ''excel'')    with open(''input.csv'', ''r'') as mycsv:        reader = csv.reader(mycsv)        for row in reader:            if row[0] not in lines:                writer.writerow(row)

不幸的是,我一直收到此错误,而且我不知道它是什么。

Traceback (most recent call last):  File "C:\Python32\Sample Program\csvParser.py", line 12, in <module>    for row in reader:_csv.Error: line contains NULL byte

感谢这里的所有人,甚至使我明白这一点。

csv.reader无法打开文件时,它需要一个文件对象。更好的解决方案是:

import csvlines = []with open(''output.txt'', ''r'') as f:    for line in f.readlines():        lines.append(line[:-1])with open(''corrected.csv'',''w'') as correct:    writer = csv.writer(correct, dialect = ''excel'')    with open(''input.csv'', ''r'') as mycsv:        reader = csv.reader(mycsv)        for row in reader:            if row[0] not in lines:                writer.writerow(row)

答案1

小编典典

我已经通过更简单的解决方案解决了类似的问题:

import codecscsvReader = csv.reader(codecs.open(''file.csv'', ''rU'', ''utf-16''))

关键是使用编解码器模块以UTF-16编码打开文件,还有很多编码,请查看文档。

今天关于只能通过csv阅读器迭代一次利用csv.reader函数读取的数据存储类型是的分享就到这里,希望大家有所收获,若想了解更多关于bash – 循环只在主体中使用`ssh`迭代一次、c# – 只能通过特定方法设置属性、CSV阅读器行为,无和空字符串、CSV阅读器(Python)中的“行包含NULL字节”等相关知识,可以在本站进行查询。

本文标签: