Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/variables/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 在所有csv列之间通用_Python_Csv - Fatal编程技术网

Python 在所有csv列之间通用

Python 在所有csv列之间通用,python,csv,Python,Csv,我有一个csv文件 table1 table2 table3 table4 table5 paper paper pen book book pen pencil pencil charger apple apple pen charger beatroot sandle beatroot mobile apple pen paper sandle book pape

我有一个csv文件

table1    table2    table3  table4   table5
paper     paper     pen     book     book
pen       pencil    pencil  charger  apple
apple     pen       charger beatroot sandle
beatroot  mobile    apple   pen      paper
sandle    book      paper   paper
我需要在所有列中找到类似的条目。在这种情况下,输出将为:

paper
列可能会增加或减少

对于2列,可使用以下方法实现相似性:

# reading csv file and converting it to dictionary
with open(input_file, 'r') as csvin:
    reader=csv.DictReader(csvin)
    data={k.strip():[v] for k,v in reader.next().items()}
    for line in reader:
        for k,v in line.items():
            k=k.strip()
            data[k].append(v)

# iterating the dictionary for each 2 columns
for a, b in itertools.combinations(data, 2):
    # to get common species names
    common = set(data[a]) & set(data[b])
但是,我不知道如何从所有列中获取相似的值。

您可以使用with跳过空格,然后压缩行以获取列,因为最后一列中缺少一个值,所以我们使用。转换集合中的柱并使用以下方法获取交点:

请注意,您的文件不是正确的csv文件,如果您的非最后一列中缺少值,这将无法正确解释您的输入。至少考虑使用不是空间的分隔符。

例子 使用解析字符串并显示其适用于测试用例:

from itertools import izip_longest
import csv
import StringIO

data='''table1    table2    table3  table4   table5
paper     paper     pen     book     book
pen       pencil    pencil  charger  apple
apple     pen       charger beatroot sandle
beatroot  mobile    apple   pen      paper
sandle    book      paper   paper'''

f = StringIO.StringIO(data)
reader = csv.reader(f, delimiter=' ', skipinitialspace=True)
cols = map(set, izip_longest(*reader))

print set.intersection(*cols)
输出

您可以使用with跳过空格,然后压缩行以获取列,我们使用with是因为最后一列中缺少一个值。转换集合中的柱并使用以下方法获取交点:

请注意,您的文件不是正确的csv文件,如果您的非最后一列中缺少值,这将无法正确解释您的输入。至少考虑使用不是空间的分隔符。

例子 使用解析字符串并显示其适用于测试用例:

from itertools import izip_longest
import csv
import StringIO

data='''table1    table2    table3  table4   table5
paper     paper     pen     book     book
pen       pencil    pencil  charger  apple
apple     pen       charger beatroot sandle
beatroot  mobile    apple   pen      paper
sandle    book      paper   paper'''

f = StringIO.StringIO(data)
reader = csv.reader(f, delimiter=' ', skipinitialspace=True)
cols = map(set, izip_longest(*reader))

print set.intersection(*cols)
输出


查看
DictReader
set
。你做了哪些研究?你试过什么代码?@海龟检查我的最新问题检查
DictReader
set
。你做过什么研究?你试过什么代码?@海龟检查我更新的问题嗯。它对我有用。它与
paper
匹配,我正在使用您的示例文件。是的,我正在测试相同的文件。它会打印所有的值,而不是常见的检查示例,这样我们就可以找出我得到的输出和你得到的输出之间的差异。它对我有用。它与
paper
匹配,我正在使用您的示例文件。是的,我正在测试相同的文件。它打印所有的值,而不是检查示例,这样我们就可以找出我得到的输出和你得到的输出之间的差异。
set(['paper'])