我正在尝试从一个CSV文件中获取数据,并将该数据的相应信息放在另一个CSV文件中,并将它们合并到输出文件中。
让我们说这是我的查找文件:
Name.csv:
Product[] productArr = (Product[]) productList.toArray();
这是另一个csv文件,我将从中获取服务器,IP地址等的相关信息
Main.csv
+------+
|CI_Name|
+------+
| a |
| b |
| c |
| ... |
+------+
我想要的是将这两个信息合并到一个新的excel表(csv)中,基本上是一个VLOOKUP,请帮助Python Coders!我需要一个代码和解释,这样我将来可以轻松地进行Vlookup。
这是我尝试过的代码:
+------+--------+------------+
|CI_Name | Server | IP-Address |
+------+--------+------------+
| a | | |
| b | | |
| c | | |
| ... | | |
+------+--------+------------+
我得到的错误是:
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)
答案 0 :(得分:0)
我没有专门为CSV工作,但是我不得不使用python为google工作表生成文档,这样做时数据看起来就像这样,其中每个列表都是一行:
names = [['Name'], ['a'], ['b'], ['c']]
回到你的问题,根据我的理解,如果匹配,你想要基本上加入每一个。
names = [['Name'], ['a'], ['b'], ['c']]
data = [['Name', 'Server', 'IP-Address'], ['a', 'server1', '127.0.0.1'], ['b', 'server1', '127.0.0.1'], ['c', 'server2', '0.0.0.1']]
joined_data = []
for name, data in zip(names[1:], data[1:]):
if name in data:
joined_data.append(data)
print joined_data
产生以下输出
[['a', 'server1', '127.0.0.1'], ['b', 'server1', '127.0.0.1'], ['c', 'server2', '0.0.0.1']]
你可以通过列表理解使这更加pythonic:
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:
在Python 2中,zip返回元组列表。这个很好,当foo和 酒吧不是很大。如果它们都是巨大的那么形成 zip(foo,bar)是一个不必要的大量临时变量 应该用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:])
的原因是消除第一行"行" (列表)数据是标题,因为它们不是我们正在处理的数据。