我不确定如何准确地表达我的问题,而且我看到了一些相似问题,但并非完全是我想做的事情。如果已经有解决方案,请指导我。
这就是我想要做的:
在我的工作中,我们已经构建了一些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中以直接接受对象作为输入。
希望这很清楚,并感谢任何贡献者。
答案 0 :(得分:0)
对于那些有兴趣或可能有相同问题/目的的人,这是我为解决此问题所做的事情。
我基本上只是创建了一个临时的命名文件,将.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)