【问题标题】:how to write csv to "variable" instead of file?如何将csv写入“变量”而不是文件?
【发布时间】:2020-01-08 15:11:22
【问题描述】:

我不确定如何准确地表达我的问题,并且我看到了一些 类似 的问题,但不完全是我想要做的。如果已经有解决方案,请指导我。

这是我想要做的:

在我的工作中,我们构建了一些 pkg 来处理各种数据类型。我正在使用的一个方法是将 csv 文件读入 std_io 对象(std_io 是我们的通用对象类,可以读取任何类型的数据文件)。

我正在尝试将其连接到我正在编写的另一个 pkg,因此我可以在新 pkg 中创建一个对象,并将其转换为 std_io 对象。

问题是,std_io 对象旨在读取实际文件,而不是接收对象。为了解决这个问题,我基本上可以将我的数据写入temp.csv 文件,然后将其读入std_io 对象。

我想知道是否有办法消除编写temp.csv 文件的这一步。

这是我的代码:

x #my object
df = x.to_df() #object class method to convert to a pandas dataframe
df.to_csv('temp.csv') #write data to a csv file
std_io_obj = std_read('temp.csv') #read csv file into a std_io object

有没有办法基本上将写入 csv 文件的输出直接传递到std_read?这有意义吗?

我想这样做的唯一原因是避免必须将附加功能编码到任何一个 pkg 中以直接接受对象作为输入。

希望这很清楚,并感谢任何做出贡献的人。

【问题讨论】:

标签: python pandas csv


【解决方案1】:

对于那些感兴趣的人,或者可能有同样类型的问题/目标的人,这是我为解决这个问题所做的。

我基本上只是创建了一个临时命名文件,将一个 .csv 文件名链接到这个临时文件,然后将它传递给我的 std_read 函数,该函数需要一个 csv 文件名作为输入。

这基本上欺骗了函数,使其认为它正在将真实文件的名称作为输入,它只是像往常一样打开它并使用 csvreader 对其进行解析。

这是代码:

import tempfile
import os

x #my object I want to convert to a  std_io object
text = x.to_df().to_csv() #object class method to convert to a pandas dataframe then generate the 'text' of a csv file

filename = 'temp.csv'

with tempfile.NamedTemporaryFile(dir = os.path.dirname('.')) as f:
    f.write(text.encode())
    os.link(f.name, filename)

stdio_obj = std_read(filename)
os.unlink(filename)
del f

仅供参考 - std_read 函数本质上只是以通常的方式打开文件,并将其传递给 csvreader:

with open(filename, 'r') as f:
    rdr = csv.reader(f)

【讨论】:

  • 感谢大家的建议,尤其是@QuangHoang 引导我朝着正确的方向前进
猜你喜欢
  • 1970-01-01
  • 2014-12-19
  • 2011-01-04
  • 1970-01-01
  • 2018-08-10
  • 2011-08-12
  • 2018-05-22
  • 2023-01-25
  • 2015-06-06
相关资源
最近更新 更多