【问题标题】:How to write lists into a csv using python如何使用python将列表写入csv
【发布时间】:2018-04-27 23:54:30
【问题描述】:

我正在尝试将两个列表写入 csv 文件。我尝试了这里列出的几个解决方案:How to write data from two lists into columns in a csv? izip 解决方案对我不起作用。当我尝试它时,我得到了这个错误:

ImportError: cannot import name 'izip'

我能够导入 itertools,只是不能导入 izip。

然后我尝试了 zip 解决方案,但由于某种原因,它最终删除了我原始 csv 文件的内容。原始文件在那里,但现在里面什么都没有。这绝对不是我想要的!

这就是我现在拥有的:

for eas,nor in zip(xUTM, yUTM):
    cor=(utm.to_latlon(eas, nor, 20, 'Q'))
    treecor.append(cor)
l=list(map(list,zip(*treecor)))
lat=l[0]
lon=l[1]

我想创建一个原始文件的副本,并在副本的末尾添加一个“lat”列和一个“lon”列(按此顺序)。到目前为止我尝试过的解决方案是否有替代方案?

谢谢!

【问题讨论】:

  • 您在 Python 3 中使用的是 Python 2 答案。在 Python 3 中,itertools.izip 被重命名为普通的旧内置 zip
  • 你没有显示你的文件处理代码——当你说 lat log 列时——你是指每一行吗?您必须用新列完整地写出每一行。
  • 您正在通过以写入模式打开文件名来擦除原始文件的内容。如果您正在玩这种东西,我建议您使用不同的输入和输出文件名,直到您可以正常工作为止。
  • 我已将 Python 3 的差异编辑为您链接到的问题的公认答案。编辑后的版本是否足以让您清楚了解?
  • 啊哈!这就解释了那个!你能解释一下如何使用 zip 吗?或者你能分享一个我应该看的地方吗?

标签: python csv zip itertools


【解决方案1】:

您可以使用 zip 和生成器编写 treecor 来应用映射功能。这通常优于 map 函数。

treecor = [utm.to_latlon(eas, nor, 20, 'Q') for eas, nor in zip(xUTM, yUTM)]

或完全跳过该步骤,仅根据需要计算纬度/经度。由于您要附加列,因此您需要完全覆盖 csv 文件。最好对成功重命名的临时文件执行此操作。使用 zip 将 csv 中的行与 utm 列表中的项目组合起来:

import os

xUTM, yUTM = get_utm_lists()

filename = 'orig.csv'

try:
    with open(filename) as in_fp, open(filename + ".tmp", "w") as out_fp:
        in_csv = csv.reader(in_fp)
        out_csv = csv.writer(out_fp)
        for row, eas, nor in zip(in_csv, xUTM, yUTM):
            out_csv.write(row + *utm.to_latlon(eas, nor, 20, 'Q'))
    os.rename(filename + ".tmp", filename)
except OSError as e:
    print(e)

【讨论】:

    【解决方案2】:

    我找不到任何我发现有效的解决方案。最后我和一个朋友想出了这个:

    with open('cord_out.tsv','w')as fh:
        for i in treecor:
            print(i[0],'\t',i[1],file=fh)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-11-09
      • 1970-01-01
      • 1970-01-01
      • 2014-06-27
      • 2014-09-21
      • 2016-06-30
      • 1970-01-01
      相关资源
      最近更新 更多