python - 优化 Python CSV 阅读器性能

标签 python performance csv

我的以下代码工作正常,但速度太慢。如果您能提供任何帮助,我将不胜感激:

import gf
import csv
cic = gf.ct
cii = gf.cit
li = gf.lt
oc = "Output.csv"
with open(cic, "rb") as input1:
  reader = csv.DictReader(cie,gf.ctih)
  with open(oc,"wb") as outfile:
    writer = csv.DictWriter(outfile,gf.ctoh)
    writer.writerow(dict((h,h) for h in gf.ctoh))
    next(reader)
    for ci in reader:
      row = {}
      row["ci"] = ci["id"]
      row["cyf"] = ci["yf"]
      with open(cii,"rb") as ciif:
        reader2 = csv.DictReader(ciif,gf.citih)
        next(reader2)
        with open(li, "rb") as lif:
          reader3 = csv.DictReader(lif,gf.lih)
          next(reader3)
          for cii in reader2:
            if ci["id"] == cii["id"]:
              row["ci"] = cii["ca"]
          for li in reader3:
            if ci["id"] == li["en_id"]:
              row["cc"] = li["c"]
      writer.writerow(row)

我为 reader 中的每一行打开 reader2 和 reader3 的原因是因为 reader 对象迭代一次然后完成。但是必须有一种更有效的方法来做到这一点,我将不胜感激您能提供的任何帮助!

如果有帮助,这段代码背后的直觉如下:从输入文件 1 中,抓取两个单元格;查看输入文件 2 是否与输入文件 1 具有相同的主键,如果是,则从输入文件 2 中抓取一个单元格并将其与其他两个保存的单元格一起保存;查看输入文件 3 是否与输入文件 1 具有相同的主键,如果是,则从 inputfile3 中抓取一个单元格并保存。然后输出这四个值。也就是说,我正在从规范化表中获取元数据,并试图对其进行非规范化。必须有一种方法可以在 Python 中非常有效地执行此操作。当前代码的一个问题是我遍历读取器对象直到找到相关的 ID,此时必须有一种更简单的方法来在读取器对象中搜索给定的 ID...

最佳答案

首先,如果这确实存在于关系数据库中,为什么不通过一些精心措辞的选择进行大连接呢?

如果我这样做,我会使用 pandas.DataFrame 并将 3 个表合并在一起,然后我会遍历每一行并使用合适的逻辑将生成的“连接”数据集转换为单个最终结果。

关于python - 优化 Python CSV 阅读器性能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19145244/

相关文章:

python - csv.错误 : did you open the file in text mode?

javascript - jQuery 下载带有链接 onclick 的 csv 文件

python - 在 GUI 中显示 DHT11 的温度 - 自动刷新?

python - 使用 Flask 发送电子邮件

performance - Opengl glScalef 重置性能

c# - 手动查找比加入 LINQ 有什么好处?

arrays - 在 MATLAB 中高效计算加权距离

Python循环整个字典

python - 使用 python 读写 postgres 脚本

c - 解析已解析的字符串