输入输出输出
ohio的Python项目详细描述
内容
csvio
灵活地将数据编码为CSV格式。
俄亥俄州。encode_csv(行,*writer_args,writer=<;内置函数 writer>;,write_header=false,**writer_kwargs)
< Buff行情>将指定的 行的iterable编码成csv文本。
数据被编码到内存中的str而不是文件 系统),通过内部管理的 为每次调用 encode_csv )而构造。
例如:
>>> data = [ ... ('1/2/09 6:17', 'Product1', '1200', 'Mastercard', 'carolina'), ... ('1/2/09 4:53', 'Product1', '1200', 'Visa', 'Betina'), ... ] >>> encoded_csv = encode_csv(data) >>> encoded_csv[:80] '1/2/09 6:17,Product1,1200,Mastercard,carolina\r\n1/2/09 4:53,Product1,1200,Visa,Be' >>> encoded_csv.splitlines(keepends=True) ['1/2/09 6:17,Product1,1200,Mastercard,carolina\r\n', '1/2/09 4:53,Product1,1200,Visa,Betina\r\n']
默认情况下, 行 由内置的csv.writer编码。你 可以指定替代的writer,并提供构造 参数:
>>> header = ('Transaction_date', 'Product', 'Price', 'Payment_Type', 'Name') >>> data = [ ... {'Transaction_date': '1/2/09 6:17', ... 'Product': 'Product1', ... 'Price': '1200', ... 'Payment_Type': 'Mastercard', ... 'Name': 'carolina'}, ... {'Transaction_date': '1/2/09 4:53', ... 'Product': 'Product1', ... 'Price': '1200', ... 'Payment_Type': 'Visa', ... 'Name': 'Betina'}, ... ] >>> encoded_csv = encode_csv(data, writer=csv.DictWriter, fieldnames=header) >>> encoded_csv.splitlines(keepends=True) ['1/2/09 6:17,Product1,1200,Mastercard,carolina\r\n', '1/2/09 4:53,Product1,1200,Visa,Betina\r\n']
而且,对于使用writeheader方法的作者,您可以 在写入 行之前,指示encode_csv 调用此函数:
>>> encoded_csv = encode_csv( ... data, ... writer=csv.DictWriter, ... fieldnames=header, ... write_header=True, ... ) >>> encoded_csv.splitlines(keepends=True) ['Transaction_date,Product,Price,Payment_Type,Name\r\n', '1/2/09 6:17,Product1,1200,Mastercard,carolina\r\n', '1/2/09 4:53,Product1,1200,Visa,Betina\r\n']
类Ohio.csvtextio(行,*writer_args,write_header=false, 块大小=10,**写入程序夸格斯)
< Buff行情>可读取的类似文件的接口,将指定的数据编码为csv。
输入数据行仅在需要时被使用和编码,如 读取csvtextio 。
一个内部的 io.stringio 缓冲区用于临时存储输出,直到它被读取。(也) 与俄亥俄州的encode_csv不同,这个缓冲区在读/写过程中被重用 循环)< /P>
例如,我们可以将以下数据编码为csv:
>>> data = [ ... ('1/2/09 6:17', 'Product1', '1200', 'Mastercard', 'carolina'), ... ('1/2/09 4:53', 'Product1', '1200', 'Visa', 'Betina'), ... ] >>> csv_buffer = CsvTextIO(data)
数据可以通过标准的文件对象方法进行编码和检索, 例如 read , readline 和迭代:
>>> csv_buffer.read(15) '1/2/09 6:17,Pro' >>> next(csv_buffer) 'duct1,1200,Mastercard,carolina\r\n' >>> list(csv_buffer) ['1/2/09 4:53,Product1,1200,Visa,Betina\r\n'] >>> csv_buffer.read() ''
注意,在上面的例子中,我们首先读取15个字节的编码 csv,然后通过迭代读取行的其余部分 调用readline,然后将剩余的csv收集到 名单。最后,我们试图阅读仍然保留的全部内容- 什么都不是。
类Ohio.csvdicttextio(行,*writer_args,write_header=false, 块大小=10,**写入程序夸格斯)
< Buff行情>csvtextio 它接受以dict形式存在的行数据。
数据被传递到csv.dictwriter
另请参见: 俄亥俄州.csvtextio
俄亥俄州。iter_csv(行,*writer_args,write_header=false, **作者夸格斯)
< Buff行情>从数据的 行生成编码csv行。
参见: 俄亥俄州.csvwritertextio
俄亥俄州。iter_dict_csv(行,*writer_args,write_header=false, **作者夸格斯)
< Buff行情>从数据的 行生成编码csv行。
参见: 俄亥俄州.csvwritertextio
俄亥俄级。csvwritertextio(*writer_args,**writer_kwargs)
< Buff行情>csv.writer兼容接口,用于在 内存,
writer实例也可以被读取,以检索编写的csv,如 它是书面的。
而不是写入文件系统,内部 io.stringio 缓冲区用于临时存储输出,直到它被读取。 (与俄亥俄州encode_csv不同,这个缓冲区在 读/写循环。)
features类方法:映射输入的生成器 可将数据 行 转换成编码的csv文本行。 ( iter_csv 不同于俄亥俄州的 encode_csv ,因为它很懒 生成csv行,而不是急切地编码整个csv 身体)
注意 :如果不需要控制如何写入行,但是 需要一个迭代和/或可读的接口来编码csv, 还要考虑更直接的 俄亥俄州.csvtextio
例如,我们可以用相同的 (可选)参数,就像我们 csv.writer ,(减去文件 描述符):
>>> csv_buffer = CsvWriterTextIO(dialect='excel')
…然后通过 writerow 或 writerows 写入它:
>>> csv_buffer.writerows([ ... ('1/2/09 6:17', 'Product1', '1200', 'Mastercard', 'carolina'), ... ('1/2/09 4:53', 'Product1', '1200', 'Visa', 'Betina'), ... ])
然后可以通过标准文件对象读取写入的数据 方法,例如 read , readline 和迭代:
>>> csv_buffer.read(15) '1/2/09 6:17,Pro' >>> list(csv_buffer) ['duct1,1200,Mastercard,carolina\r\n', '1/2/09 4:53,Product1,1200,Visa,Betina\r\n']
注意,在上面的例子中,我们首先读取15个字节的编码 csv,然后将剩余的csv收集到一个列表中,通过 迭代(通过readline返回其行)。然而, 第一行短了前15个字节。
也就是说,从csvwritertextio中读取csv将清空 缓冲区中的内容:
>>> csv_buffer.read() ''
我们可以通过写入来重新填充缓冲区 再次:
>>> data = [ ... ('1/2/09 6:17', 'Product1', '1200', 'Mastercard', 'carolina'), ... ('1/2/09 4:53', 'Product1', '1200', 'Visa', 'Betina'), ... ] >>> encoded_csv = encode_csv(data) >>> encoded_csv[:80] '1/2/09 6:17,Product1,1200,Mastercard,carolina\r\n1/2/09 4:53,Product1,1200,Visa,Be' >>> encoded_csv.splitlines(keepends=True) ['1/2/09 6:17,Product1,1200,Mastercard,carolina\r\n', '1/2/09 4:53,Product1,1200,Visa,Betina\r\n']0
最后,类方法可以为我们完成所有这些, 根据我们的要求生成编码csv行:
>>> data = [ ... ('1/2/09 6:17', 'Product1', '1200', 'Mastercard', 'carolina'), ... ('1/2/09 4:53', 'Product1', '1200', 'Visa', 'Betina'), ... ] >>> encoded_csv = encode_csv(data) >>> encoded_csv[:80] '1/2/09 6:17,Product1,1200,Mastercard,carolina\r\n1/2/09 4:53,Product1,1200,Visa,Be' >>> encoded_csv.splitlines(keepends=True) ['1/2/09 6:17,Product1,1200,Mastercard,carolina\r\n', '1/2/09 4:53,Product1,1200,Visa,Betina\r\n']1
俄亥俄级。csvdictwritertextio(*writer_args,**writer_kwargs)
< Buff行情>csvwritertextio 它接受 dict形式的行数据。
数据被传递到csv.dictwriter
另请参见: 俄亥俄州.csvwritertextio
ITERIO
为任何iterable提供可读的类文件接口。
俄亥俄类。迭代文本(iterable)
< Buff行情>可读取文本流的类似文件的接口。
iteratortextio 包装任何可使用的文本,如 一个文件,提供方法readline() , 读取([大小]) , 等。 , (通过基类 俄亥俄州.streamtextiobase 实现)。
例如,给定一个消费者希望 read() :
>>> data = [ ... ('1/2/09 6:17', 'Product1', '1200', 'Mastercard', 'carolina'), ... ('1/2/09 4:53', 'Product1', '1200', 'Visa', 'Betina'), ... ] >>> encoded_csv = encode_csv(data) >>> encoded_csv[:80] '1/2/09 6:17,Product1,1200,Mastercard,carolina\r\n1/2/09 4:53,Product1,1200,Visa,Be' >>> encoded_csv.splitlines(keepends=True) ['1/2/09 6:17,Product1,1200,Mastercard,carolina\r\n', '1/2/09 4:53,Product1,1200,Visa,Betina\r\n']2
…或者是流式文本,或者是内存中的文本( i.e. 在文件系统上):
>>> data = [ ... ('1/2/09 6:17', 'Product1', '1200', 'Mastercard', 'carolina'), ... ('1/2/09 4:53', 'Product1', '1200', 'Visa', 'Betina'), ... ] >>> encoded_csv = encode_csv(data) >>> encoded_csv[:80] '1/2/09 6:17,Product1,1200,Mastercard,carolina\r\n1/2/09 4:53,Product1,1200,Visa,Be' >>> encoded_csv.splitlines(keepends=True) ['1/2/09 6:17,Product1,1200,Mastercard,carolina\r\n', '1/2/09 4:53,Product1,1200,Visa,Betina\r\n']3
…我们可以通过迭代文本连接这两个接口
>>> data = [ ... ('1/2/09 6:17', 'Product1', '1200', 'Mastercard', 'carolina'), ... ('1/2/09 4:53', 'Product1', '1200', 'Visa', 'Betina'), ... ] >>> encoded_csv = encode_csv(data) >>> encoded_csv[:80] '1/2/09 6:17,Product1,1200,Mastercard,carolina\r\n1/2/09 4:53,Product1,1200,Visa,Be' >>> encoded_csv.splitlines(keepends=True) ['1/2/09 6:17,Product1,1200,Mastercard,carolina\r\n', '1/2/09 4:53,Product1,1200,Visa,Betina\r\n']4
管道
有效连接 read() 和 write() 接口。
pipetextio 提供了一个可读的文本接口 其制作者需要一个 可写的 接口。
相比之下,首先将这些文本写入内存,然后使用 它, pipetextio 只允许在必要时填充写操作 它的缓冲区,以异步方式完成读取操作。像这样的, pipetextio 消耗稳定的最小内存,并且 使用最少的样板,显著提高速度。
俄亥俄州。管道文本(writer_func,*args,buffer_size=none,**kwargs)
< Buff行情>由给定函数通过 可读的类文件界面。
使用进程内编写器线程(运行给定函数)来 模拟缓冲文本传输,例如在标准输出之间 以及两个管道流程的输入。
对 write 的调用将被阻塞,直到对 read 的调用需要为止。
注意:如果可能,请使用发电机!你的迭代文本- 编写函数很可能被设计为一个生成器(或者 某种迭代器)。它的输出就可以,简单得多Y和 很容易,被流到一些输入。如果输入必须 读 从类似文件的对象中,请参见 ohioi.iteratortextio 。如果你 输出必须是csv编码的,请参见 俄亥俄州。encode_csv 和 俄亥俄州.csvwritertextio
pipetextio 适用于输出必须是 写入类似于文件的对象,该对象被设置为阻止以强制 迭代性。
pipetextio 不是"可查看",而是支持所有其他典型的, 读写类似文件的功能。
例如,考虑以下可调用的,需要 对象,写入对象:
>>> data = [ ... ('1/2/09 6:17', 'Product1', '1200', 'Mastercard', 'carolina'), ... ('1/2/09 4:53', 'Product1', '1200', 'Visa', 'Betina'), ... ] >>> encoded_csv = encode_csv(data) >>> encoded_csv[:80] '1/2/09 6:17,Product1,1200,Mastercard,carolina\r\n1/2/09 4:53,Product1,1200,Visa,Be' >>> encoded_csv.splitlines(keepends=True) ['1/2/09 6:17,Product1,1200,Mastercard,carolina\r\n', '1/2/09 4:53,Product1,1200,Visa,Betina\r\n']5
最典型的情况是,我们可以按如下方式阅读此内容:
>>> data = [ ... ('1/2/09 6:17', 'Product1', '1200', 'Mastercard', 'carolina'), ... ('1/2/09 4:53', 'Product1', '1200', 'Visa', 'Betina'), ... ] >>> encoded_csv = encode_csv(data) >>> encoded_csv[:80] '1/2/09 6:17,Product1,1200,Mastercard,carolina\r\n1/2/09 4:53,Product1,1200,Visa,Be' >>> encoded_csv.splitlines(keepends=True) ['1/2/09 6:17,Product1,1200,Mastercard,carolina\r\n', '1/2/09 4:53,Product1,1200,Visa,Betina\r\n']6
而且,这是推荐的。不过,为了以身作则, 请考虑以下事项:
>>> data = [ ... ('1/2/09 6:17', 'Product1', '1200', 'Mastercard', 'carolina'), ... ('1/2/09 4:53', 'Product1', '1200', 'Visa', 'Betina'), ... ] >>> encoded_csv = encode_csv(data) >>> encoded_csv[:80] '1/2/09 6:17,Product1,1200,Mastercard,carolina\r\n1/2/09 4:53,Product1,1200,Visa,Be' >>> encoded_csv.splitlines(keepends=True) ['1/2/09 6:17,Product1,1200,Mastercard,carolina\r\n', '1/2/09 4:53,Product1,1200,Visa,Betina\r\n']7
在上面的示例中, write_output 需要一个类似于 编写输出的接口;并且,我们假设 无法替代此实现(例如生成器)。 和 它的输出足够大,我们不想保持 在记忆中。如果我们不需要这个输出 写入文件系统后,我们可以直接在 块,
< Buff行情>最初,没有写入任何内容。
< < > > >
- 在请求读取时–在本例中,只有前5个
- 字节–写入程序已初始化,并允许 写它的第一个块(恰好是一个完整的块 线)。这是从写缓冲区中检索的,并且 足以满足读取请求。 < > > < Buff行情>
- 已从写入缓冲区中删除第一个块,
- 允许作者急切地写出下一个块, (第二行),(但不超过这一行)。 < > >
- 第二次读取请求(对于行的其余部分)是
对从写入中检索到的第一个块完全满意 缓冲器。不再写作。
- 对于另一行,第三个读取请求检索
写入缓冲区中的第二个块。允许写作者 将其最后一个块写入写入缓冲区。
- 最终读取请求返回所有剩余文本,
(从写缓冲区检索)。
< > >
具体来说,这对于postgresql副本通常是有用的 命令,用于高效的数据传输(并且不添加 文件系统的复杂性)。而你的数据库接口 vary, pipetextio 启用以下语法,例如 将数据复制到数据库:
>>> data = [ ... ('1/2/09 6:17', 'Product1', '1200', 'Mastercard', 'carolina'), ... ('1/2/09 4:53', 'Product1', '1200', 'Visa', 'Betina'), ... ] >>> encoded_csv = encode_csv(data) >>> encoded_csv[:80] '1/2/09 6:17,Product1,1200,Mastercard,carolina\r\n1/2/09 4:53,Product1,1200,Visa,Be' >>> encoded_csv.splitlines(keepends=True) ['1/2/09 6:17,Product1,1200,Mastercard,carolina\r\n', '1/2/09 4:53,Product1,1200,Visa,Betina\r\n']8
…或者,从数据库中复制数据:
>>> data = [ ... ('1/2/09 6:17', 'Product1', '1200', 'Mastercard', 'carolina'), ... ('1/2/09 4:53', 'Product1', '1200', 'Visa', 'Betina'), ... ] >>> encoded_csv = encode_csv(data) >>> encoded_csv[:80] '1/2/09 6:17,Product1,1200,Mastercard,carolina\r\n1/2/09 4:53,Product1,1200,Visa,Be' >>> encoded_csv.splitlines(keepends=True) ['1/2/09 6:17,Product1,1200,Mastercard,carolina\r\n', '1/2/09 4:53,Product1,1200,Visa,Betina\r\n']9
或者,writer参数可以传递给 pipetextio :
>>> header = ('Transaction_date', 'Product', 'Price', 'Payment_Type', 'Name') >>> data = [ ... {'Transaction_date': '1/2/09 6:17', ... 'Product': 'Product1', ... 'Price': '1200', ... 'Payment_Type': 'Mastercard', ... 'Name': 'carolina'}, ... {'Transaction_date': '1/2/09 4:53', ... 'Product': 'Product1', ... 'Price': '1200', ... 'Payment_Type': 'Visa', ... 'Name': 'Betina'}, ... ] >>> encoded_csv = encode_csv(data, writer=csv.DictWriter, fieldnames=header) >>> encoded_csv.splitlines(keepends=True) ['1/2/09 6:17,Product1,1200,Mastercard,carolina\r\n', '1/2/09 4:53,Product1,1200,Visa,Betina\r\n']0
(但是,记住,可赎回债券的签名 pipetextio 必须使其第一个匿名参数 pipetextio 实例。)
同样考虑上面的例子,使用helper pipe\u text :
>>> header = ('Transaction_date', 'Product', 'Price', 'Payment_Type', 'Name') >>> data = [ ... {'Transaction_date': '1/2/09 6:17', ... 'Product': 'Product1', ... 'Price': '1200', ... 'Payment_Type': 'Mastercard', ... 'Name': 'carolina'}, ... {'Transaction_date': '1/2/09 4:53', ... 'Product': 'Product1', ... 'Price': '1200', ... 'Payment_Type': 'Visa', ... 'Name': 'Betina'}, ... ] >>> encoded_csv = encode_csv(data, writer=csv.DictWriter, fieldnames=header) >>> encoded_csv.splitlines(keepends=True) ['1/2/09 6:17,Product1,1200,Mastercard,carolina\r\n', '1/2/09 4:53,Product1,1200,Visa,Betina\r\n']1
基准
低级原语。
俄亥俄州类。streamtextiobase
< Buff行情>可读文件,如抽象基类。
具体类必须实现方法 要读取的文本块。
俄亥俄州例外。ioclosed(*args)
< Buff行情> 指示试图对类似文件的对象执行操作的异常 已经关闭。扩展
将俄亥俄州与所需工具集集成的模块。
熊猫的扩展
此模块使用方法将pandas.dataframe扩展到 从 复制
要启用此模块,只需在项目中的任何位置导入此模块, 很可能-只有一次,在我TS根模块):
>>> header = ('Transaction_date', 'Product', 'Price', 'Payment_Type', 'Name') >>> data = [ ... {'Transaction_date': '1/2/09 6:17', ... 'Product': 'Product1', ... 'Price': '1200', ... 'Payment_Type': 'Mastercard', ... 'Name': 'carolina'}, ... {'Transaction_date': '1/2/09 4:53', ... 'Product': 'Product1', ... 'Price': '1200', ... 'Payment_Type': 'Visa', ... 'Name': 'Betina'}, ... ] >>> encoded_csv = encode_csv(data, writer=csv.DictWriter, fieldnames=header) >>> encoded_csv.splitlines(keepends=True) ['1/2/09 6:17,Product1,1200,Mastercard,carolina\r\n', '1/2/09 4:53,Product1,1200,Visa,Betina\r\n']2
例如,如果您只有一个模块(在其中),或者在python中 包装:
>>> header = ('Transaction_date', 'Product', 'Price', 'Payment_Type', 'Name') >>> data = [ ... {'Transaction_date': '1/2/09 6:17', ... 'Product': 'Product1', ... 'Price': '1200', ... 'Payment_Type': 'Mastercard', ... 'Name': 'carolina'}, ... {'Transaction_date': '1/2/09 4:53', ... 'Product': 'Product1', ... 'Price': '1200', ... 'Payment_Type': 'Visa', ... 'Name': 'Betina'}, ... ] >>> encoded_csv = encode_csv(data, writer=csv.DictWriter, fieldnames=header) >>> encoded_csv.splitlines(keepends=True) ['1/2/09 6:17,Product1,1200,Mastercard,carolina\r\n', '1/2/09 4:53,Product1,1200,Visa,Betina\r\n']3
然后在它的 \uu init\uuu.py 中,确保加载扩展 在运行使用它们的代码之前。
注意 :这些扩展适用于熊猫,并尝试 导入熊猫 。熊猫必须在您的 环境。
俄亥俄类。分机熊猫。数据帧复制到(数据帧)
< Buff行情>pg_copy_to :通过postgresql将数据帧复制到数据库表 复制
俄亥俄州.csvtextio 允许直接读取 数据帧 在postgresql copy 命令的"标准输入"中,对于 快速、内存高效的数据库持久性(并且没有 不需要参与本地文件系统)。
例如,给定一个sqlalchemy数据库连接引擎和一个 熊猫 数据帧 :
>>> header = ('Transaction_date', 'Product', 'Price', 'Payment_Type', 'Name') >>> data = [ ... {'Transaction_date': '1/2/09 6:17', ... 'Product': 'Product1', ... 'Price': '1200', ... 'Payment_Type': 'Mastercard', ... 'Name': 'carolina'}, ... {'Transaction_date': '1/2/09 4:53', ... 'Product': 'Product1', ... 'Price': '1200', ... 'Payment_Type': 'Visa', ... 'Name': 'Betina'}, ... ] >>> encoded_csv = encode_csv(data, writer=csv.DictWriter, fieldnames=header) >>> encoded_csv.splitlines(keepends=True) ['1/2/09 6:17,Product1,1200,Mastercard,carolina\r\n', '1/2/09 4:53,Product1,1200,Visa,Betina\r\n']4
我们可以简单地调用dataframe的俄亥俄扩展方法, pg_copy_to :
>>> header = ('Transaction_date', 'Product', 'Price', 'Payment_Type', 'Name') >>> data = [ ... {'Transaction_date': '1/2/09 6:17', ... 'Product': 'Product1', ... 'Price': '1200', ... 'Payment_Type': 'Mastercard', ... 'Name': 'carolina'}, ... {'Transaction_date': '1/2/09 4:53', ... 'Product': 'Product1', ... 'Price': '1200', ... 'Payment_Type': 'Visa', ... 'Name': 'Betina'}, ... ] >>> encoded_csv = encode_csv(data, writer=csv.DictWriter, fieldnames=header) >>> encoded_csv.splitlines(keepends=True) ['1/2/09 6:17,Product1,1200,Mastercard,carolina\r\n', '1/2/09 4:53,Product1,1200,Visa,Betina\r\n']5
pg_copy_to 支持与 to_sql相同的所有参数, (除了参数 方法 )。
俄亥俄州。分机熊猫到SQL方法到PG复制到(表,连接,键, 数据设备)
< Buff行情>通过postgresql 复制将pandas数据通过流写入表中
这实现了pandas to_sql "方法",利用 俄亥俄州.csvtextio 性能稳定。
俄亥俄州。ext.pandas.data_frame_pg_copy_from(sql,engine,index_col=无, parse_dates=false,columns=none,dtype=none,nrows=none, 缓冲区大小=100)
< Buff行情>pg_copy_from :从数据库表或 通过PostgreSQL进行查询 复制
俄亥俄州。pipetextio 启用 postgresql 将命令复制到pandas read_csv ,以便快速执行, 从数据库中构造 数据帧 没有本地文件系统的不必要参与。
例如,给定一个sqlalchemy数据库连接引擎:
>>> header = ('Transaction_date', 'Product', 'Price', 'Payment_Type', 'Name') >>> data = [ ... {'Transaction_date': '1/2/09 6:17', ... 'Product': 'Product1', ... 'Price': '1200', ... 'Payment_Type': 'Mastercard', ... 'Name': 'carolina'}, ... {'Transaction_date': '1/2/09 4:53', ... 'Product': 'Product1', ... 'Price': '1200', ... 'Payment_Type': 'Visa', ... 'Name': 'Betina'}, ... ] >>> encoded_csv = encode_csv(data, writer=csv.DictWriter, fieldnames=header) >>> encoded_csv.splitlines(keepends=True) ['1/2/09 6:17,Product1,1200,Mastercard,carolina\r\n', '1/2/09 4:53,Product1,1200,Visa,Betina\r\n']6
我们可以简单地调用dataframe的俄亥俄扩展方法, pg_copy来自 :
>>> header = ('Transaction_date', 'Product', 'Price', 'Payment_Type', 'Name') >>> data = [ ... {'Transaction_date': '1/2/09 6:17', ... 'Product': 'Product1', ... 'Price': '1200', ... 'Payment_Type': 'Mastercard', ... 'Name': 'carolina'}, ... {'Transaction_date': '1/2/09 4:53', ... 'Product': 'Product1', ... 'Price': '1200', ... 'Payment_Type': 'Visa', ... 'Name': 'Betina'}, ... ] >>> encoded_csv = encode_csv(data, writer=csv.DictWriter, fieldnames=header) >>> encoded_csv.splitlines(keepends=True) ['1/2/09 6:17,Product1,1200,Mastercard,carolina\r\n', '1/2/09 4:53,Product1,1200,Visa,Betina\r\n']7
pg_copy_from 支持许多与 读取SQL 和 读取CSV
此外, pg_copy_from 接受优化参数 缓冲区大小 ,它控制csv编码的最大数量 在 它们被读入 数据框。取决于用例, 增加这个值可能会加快操作速度,代价是 额外的内存—反之亦然。 缓冲区大小默认为 100
基准测试
俄亥俄州对熊猫的扩展进行了基准测试,以测试它们的速度和 相对于pandas内置功能和 不使用俄亥俄州的自定义实现。
除了界面和语法细节,俄亥俄州通常都有 记忆稳定性。它的工具使管道也可以改进 速度(以及在标准用例中的速度)。
在下面的基准测试中,俄亥俄州扩展 pg_copy_from &; pg_copy_to 将内存消耗减少了84%&61%,并已完成 与内置pandas相比,节省39%和91%的时间 到SQL ,(分别)。
与使用PostgreSQL的专用扩展相比 复制 ,但使用 io.stringio 代替 ohioi.pipetextio 以及俄亥俄州。csvtextio - pg_copy_from &; pg_copy_to 。 分别减少了60%和32%的内存消耗。 pg_copy_from &;tt>pg_copy_to 也以16%和13%的速度完成 比 io.stringio 版本的时间要长。
e下面绘制的基准是根据平均值和标准 每个目标3个随机试验的偏差。输入数据包括 在83列的896677行中:其中1行为timestamp类型,51 整数和31个浮点数。基准测试包 prof ,是 保存在俄亥俄州的存储库中。 < DL>
pg_copy_from(缓冲区大小=x)
PostgreSQL数据库连接的游标将 复制 到一个 pipetextio ,pandas从中构造 数据帧
熊猫.read_sql()
pandas从给定的数据库查询构造一个 数据框 。
熊猫。读取SQL(chunkSize=100)
指示pandas生成 数据库查询结果,这些切片连接到 单帧,带: pandas.concat(chunks,copy=false)
熊猫。阅读csv(stringio())
PostgreSQL数据库连接的游标将 复制到字符串中,pandas从字符串中构造 数据帧
pg_copy_to()
数据帧 数据通过a csvtextio 编码,并由 PostgreSQL数据库连接光标的 复制 命令。
熊猫.dataframe.to_sql()
pandas将 数据框 数据逐行插入数据库。
pandas.dataframe.to_sql(method='multi', chunksize=100)
pandas将 dataframe 数据以块的形式插入数据库 行。