Python:从多个CSV创建输出CSV。伏罗库普

2024-03-29 09:30:41 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图从一个CSV文件中获取数据,并将该数据的相应信息放在另一个CSV文件中,并将它们合并到一个输出文件中。在

假设这是我的查找文件:

在名称.csv公司名称:

+------+
|CI_Name|
+------+
| a    |
| b    |
| c    |
| ...  |
+------+

这是另一个csv文件,我将从中获得服务器的相关信息,Ip地址等

在主.csv在

^{pr2}$

我想把这两个信息合并到一个新的excel表(csv),基本上是一个VLOOKUP,请帮助Python程序员!我需要一个代码和解释,这样我就可以在将来轻松地做Vlookup了。在

这是我尝试过的代码:

import csv

with open('Name.csv', 'r') as csvinput:
    with open('Main.csv', 'r') as lookuplist:
        with open('Output.csv', 'w') as output:

            reader = csv.reader(lookuplist)
            reader1 = csv.reader(csvinput)
            writer = csv.writer(output)

            for CI_Name in reader1:
                for SERVER, FQDN, AUTOMATION_ADMINISTRATOR, IP_ADDRESS, PRIMARY1, MHT_1, MHT_2, MHT_3, MHT_4 in reader: #this are the columnss i need to match from the Main and import it to the output.csv
                    if CI_Name[0] == FQDN[0]:
                        CI_Name.append(FQDN[1:])
                        writer.writerow(CI_Name)

我得到的错误是:

for SERVER, FQDN, AUTOMATION_ADMINISTRATOR, IP_ADDRESS, PRIMARY1, MHT_1, MHT_2, MHT_3, MHT_4 in reader:
ValueError: too many values to unpack

Tags: 文件csvnameinci信息foroutput
1条回答
网友
1楼 · 发布于 2024-03-29 09:30:41

我没有专门为CSV工作,但是我不得不使用python为google sheets生成文档,当这样做时,数据看起来像这样,实际上每个列表都是一行:

names = [['Name'], ['a'], ['b'], ['c']]

回到你的问题上,根据我的理解,如果它们匹配的话,你基本上都想加入其中。在

^{pr2}$

产生以下输出

[['a', 'server1', '127.0.0.1'], ['b', 'server1', '127.0.0.1'], ['c', 'server2', '0.0.0.1']]

不过,您可以通过列表理解使其更像Python:

names = [['Name'], ['a'], ['b'], ['c']]
data = [['Name', 'Server', 'IP-Address'], ['a', 'server1', '127.0.0.1'], ['b', 'server1', '127.0.0.1']

joined_data = [data for name, data in zip(names[1:], data[1:]) if name[0] in data]
print joined_data

产生以下输出

[['a', 'server1', '127.0.0.1'], ['b', 'server1', '127.0.0.1'], ['c', 'server2', '0.0.0.1']]

终点

this post中所述:

In Python 2, zip returns a list of tuples. This is fine when foo and bar are not massive. If they are both massive then forming zip(foo,bar) is an unnecessarily massive temporary variable, and should be replaced by itertools.izip

看起来有点像这样:

import itertools

names = [['Name'], ['a'], ['b'], ['c']]
data = [['Name', 'Server', 'IP-Address'], ['a', 'server1', '127.0.0.1'], ['b', 'server1', '127.0.0.1']

joined_data = [data for name, data in itertools.izip(names[1:], data[1:]) if name[0] in data]
print joined_data

最后,我做...zip(names[1:], data[1:])的原因是消除数据的第一个“行”(list),这是头文件,因为它们并不是我们要处理的数据。在

相关问题 更多 >