输入输出输出

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行情>
  1. 最初,没有写入任何内容。

  2. < < > > > < DL>
    在请求读取时–在本例中,只有前5个
    字节–写入程序已初始化,并允许 写它的第一个块(恰好是一个完整的块 线)。这是从写缓冲区中检索的,并且 足以满足读取请求。
    < > > < Buff行情>
      < DL>
      已从写入缓冲区中删除第一个块,
      允许作者急切地写出下一个块, (第二行),(但不超过这一行)。
      < > > < DL>
      第二次读取请求(对于行的其余部分)是

      对从写入中检索到的第一个块完全满意 缓冲器。不再写作。

      < DL>
      对于另一行,第三个读取请求检索

      写入缓冲区中的第二个块。允许写作者 将其最后一个块写入写入缓冲区。

      < DL>
      最终读取请求返回所有剩余文本,

      (从写缓冲区检索)。

      < > >

      具体来说,这对于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 ,是 保存在俄亥俄州的存储库中。 https://raw.githubusercontent.com/dssg/ohoi/0.4.0/doc/img/profile-copy-from-database-to-datafram-1554345457.svg? < DL>

俄亥俄州pg_copy_from_x

pg_copy_from(缓冲区大小=x)

PostgreSQL数据库连接的游标将 复制 到一个 pipetextio ,pandas从中构造 数据帧

熊猫阅读SQL

熊猫.read_sql()

pandas从给定的数据库查询构造一个 数据框

熊猫读取sql块u 100

熊猫。读取SQL(chunkSize=100)

指示pandas生成 数据库查询结果,这些切片连接到 单帧,带: pandas.concat(chunks,copy=false)

熊猫阅读字符串

熊猫。阅读csv(stringio())

PostgreSQL数据库连接的游标将 复制到字符串中,pandas从字符串中构造 数据帧

https://raw.githubusercontent.com/dssg/ohoi/0.4.0/doc/img/profile-copy-from-dataframe-to-databas-1555458507.svg? < DL>
俄亥俄州pg_copy_to

pg_copy_to()

数据帧 数据通过a csvtextio 编码,并由 PostgreSQL数据库连接光标的 复制 命令。

熊猫到SQL

熊猫.dataframe.to_sql()

pandas将 数据框 数据逐行插入数据库。

熊猫到SQL多功能

pandas.dataframe.to_sql(method='multi', chunksize=100)

pandas将 dataframe 数据以块的形式插入数据库 行。

将字符串复制到数据库
数据帧 数据被写入并编码到字符串 ,并且 然后由PostgreSQL数据库读取连接光标的 副本 命令。

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java OutOfMemoryError以及如何使运行继续   java树映射内存使用率   使用带有java spark的javascript获取api的挂起承诺状态(POST请求)   java Android:存储用户单击的CardView   输入了有关拖动的java信息   单元测试中的java DecimalFormat(“·#,##0”)前缀   来自客户端的java超时webservice调用   java未使用的超类变量   如何在Java中的参数提示中强制执行整数限制   启动期间Tomcat中出现java错误:找不到DB名称   java Marshall/Unmarshall地图   一个类在另一个类中的java访问变量   如何在java中对字符数组的文本进行对齐?   从jenkins运行时,使用selenium上传excel文件的java不起作用   java将double转换为BigInteger   java Android键盘问题与按键释放   旋转java在两个旋转矩形之间的碰撞检测   在TestNG中执行时,XML中出现java启动错误无法继续执行测试