【问题标题】:merge columns of a csv file in python with variable entries in every row in?将python中csv文件的列与每行中的变量条目合并?
【发布时间】:2011-12-14 11:59:00
【问题描述】:

我有 2 个 csv 文件

一个跟踪路由到不同的 IP 地址(这里的最后一个条目是目标 IP)也(它们是每行中可变数量的条目,因为不同的路由需要不同的跃点数)

other 有一个目标列表及其真实世界的位置坐标

第一个文件中的某些目标在第二个文件中没有条目,反之亦然

如何将真实世界的坐标放入具有匹配目标 IP 的第一个 csv 文件中? 2个文件是这样的

hop1,hop2,hop3,hop4,target1
hop1,hop2,hop3,hop4,hop5,hop6,target2

target99,position    

【问题讨论】:

  • 一定要用 Python 吗?您可以在 GNU/Linux 命令行中使用单个命令来执行此操作:join (gnu.org/software/coreutils/manual/…)
  • 刚刚检查了 'join' 的文档 - 我认为它不能对每行具有可变数量字段的文件进行操作,就像问题中的那个一样。

标签: python csv merge


【解决方案1】:
import csv

ip_file = open("ipfile.csv")
position_file = open("positionfile.csv")
output = open("output.csv", "wt")

ips = {}    

# create a CSV reader for the proper csv file with locations:
reader = csv.reader(position_file)
for line in reader:
    ips[line[0]] = line[1]


#now you have the IP + location association

for line in ip_file.readlines():
    ip = line.split(",")[-1].strip()
    output.write(line.strip() + ", " + (ips[ip] if ip in ips else "location unknown") + "\n" )

output.close()

【讨论】:

  • ips[line[0]] = line[1] NameError: name 'ips' is not defined
  • 抱歉 - 现已修复。我不小心把它剪掉了。
  • 谢谢。如何从输出中完全跳过位置未知条目?
  • 只需更改内联if ip 语句来控制 output.write 行的执行
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-09-15
  • 1970-01-01
  • 2014-12-23
  • 2018-02-02
  • 2013-11-17
  • 2017-08-20
  • 2014-12-23
相关资源
最近更新 更多