未提供项目描述
项目描述
aiocsv
异步CSV读取和写入。
安装
pip install aiocsv
. 需要 Python 3.8+。
此模块包含用C编写的扩展。可能不存在适用于您配置的预构建二进制文件。您可能需要C编译器和Python头文件来安装aiocsv。
使用方法
AsyncReader & AsyncDictReader接受任何具有read(size: int)
协程的对象,该协程应返回一个字符串。
AsyncWriter & AsyncDictWriter接受任何具有write(b: str)
协程的对象。
读取是通过自定义CSV解析器实现的,其行为应与CPython解析器完全相同。
写入是通过同步的csv.writer和csv.DictWriter对象实现的 - 序列化器将数据写入StringIO,然后该缓冲区被重写到底层异步文件。
示例
使用aiofiles的示例使用方法。
import asyncio
import csv
import aiofiles
from aiocsv import AsyncReader, AsyncDictReader, AsyncWriter, AsyncDictWriter
async def main():
# simple reading
async with aiofiles.open("some_file.csv", mode="r", encoding="utf-8", newline="") as afp:
async for row in AsyncReader(afp):
print(row) # row is a list
# dict reading, tab-separated
async with aiofiles.open("some_other_file.tsv", mode="r", encoding="utf-8", newline="") as afp:
async for row in AsyncDictReader(afp, delimiter="\t"):
print(row) # row is a dict
# simple writing, "unix"-dialect
async with aiofiles.open("new_file.csv", mode="w", encoding="utf-8", newline="") as afp:
writer = AsyncWriter(afp, dialect="unix")
await writer.writerow(["name", "age"])
await writer.writerows([
["John", 26], ["Sasha", 42], ["Hana", 37]
])
# dict writing, all quoted, "NULL" for missing fields
async with aiofiles.open("new_file2.csv", mode="w", encoding="utf-8", newline="") as afp:
writer = AsyncDictWriter(afp, ["name", "age"], restval="NULL", quoting=csv.QUOTE_ALL)
await writer.writeheader()
await writer.writerow({"name": "John", "age": 26})
await writer.writerows([
{"name": "Sasha", "age": 42},
{"name": "Hana"}
])
asyncio.run(main())
与csv的区别
aiocsv
力求成为Python内置的csv模块的替代品。但是,存在3个明显的区别
- 读取器接受具有异步
read
方法的对象,而不是文件行上的AsyncIterable。 AsyncDictReader.fieldnames
可以是None
- 使用await AsyncDictReader.get_fieldnames()
代替。csv.field_size_limit
的更改不会被现有的 Reader 实例所识别。字段大小限制在 Reader 实例化时缓存,以避免在输入的每个字符上调用昂贵的函数。
其他一些细微的差异包括
AsyncReader.line_num
、AsyncDictReader.line_num
和AsyncDictReader.dialect
不可设置,AsyncDictReader.reader
是AsyncReader
类型,AsyncDictWriter.writer
是AsyncWriter
类型,AsyncDictWriter
提供了一个额外的只读dialect
属性。
参考
aiocsv.AsyncReader
AsyncReader(
asyncfile: aiocsv.protocols.WithAsyncRead,
dialect: str | csv.Dialect | Type[csv.Dialect] = "excel",
**csv_dialect_kwargs: Unpack[aiocsv.protocols.CsvDialectKwargs],
)
一个对象,它遍历给定异步 CSV 文件中的记录。额外的关键字参数被视为方言参数。
遍历此对象返回解析后的 CSV 行 (List[str]
)。
方法:
__aiter__(self) -> self
async __anext__(self) -> List[str]
只读属性:
dialect
:解析时使用的 csv.Dialectline_num
:从源文件中读取的行数。这与最近解析的记录的最后一行的 1 为基索引的行号相吻合。
aiocsv.AsyncDictReader
AsyncDictReader(
asyncfile: aiocsv.protocols.WithAsyncRead,
fieldnames: Optional[Sequence[str]] = None,
restkey: Optional[str] = None,
restval: Optional[str] = None,
dialect: str | csv.Dialect | Type[csv.Dialect] = "excel",
**csv_dialect_kwargs: Unpack[aiocsv.protocols.CsvDialectKwargs],
)
一个对象,它遍历给定异步 CSV 文件中的记录。所有参数与 csv.DictReader 完全相同。
遍历此对象返回解析后的 CSV 行 (Dict[str, str]
)。
方法:
__aiter__(self) -> self
async __anext__(self) -> Dict[str, str]
async get_fieldnames(self) -> List[str]
属性:
fieldnames
:在将行转换为字典时使用的字段名
⚠️ 与 csv.DictReader 不同,此属性无法读取缺失的字段名 - 无法在属性获取器的标题行上await
。 请使用await reader.get_fieldnames()
。reader = csv.DictReader(some_file) reader.fieldnames # ["cells", "from", "the", "header"] areader = aiofiles.AsyncDictReader(same_file_but_async) areader.fieldnames # ⚠️ None await areader.get_fieldnames() # ["cells", "from", "the", "header"]
restkey
:如果一行比标题多单元格,所有剩余的单元格都将存储在此键下返回的字典中。默认为None
。restval
:如果一行比标题少单元格,则缺失的键将使用此值。默认为None
。reader
:底层的aiofiles.AsyncReader
实例
只读属性:
dialect
:链接到self.reader.dialect
- 当前 csv.Dialectline_num
:从源文件中读取的行数。这与最近解析的记录的最后一行的 1 为基索引的行号相吻合。
aiocsv.AsyncWriter
AsyncWriter(
asyncfile: aiocsv.protocols.WithAsyncWrite,
dialect: str | csv.Dialect | Type[csv.Dialect] = "excel",
**csv_dialect_kwargs: Unpack[aiocsv.protocols.CsvDialectKwargs],
)
一个对象,它将 CSV 行写入给定的异步文件。在此对象中,“行”是值的序列。
额外的关键字参数传递到底层的 csv.writer 实例。
方法:
async writerow(self, row: Iterable[Any]) -> None
:将一行写入指定的文件。async writerows(self, rows: Iterable[Iterable[Any]]) -> None
:将多行写入指定的文件。
只读属性:
dialect
:链接到底层的 csv.writer 的dialect
属性
aiocsv.AsyncDictWriter
AsyncDictWriter(
asyncfile: aiocsv.protocols.WithAsyncWrite,
fieldnames: Sequence[str],
restval: Any = "",
extrasaction: Literal["raise", "ignore"] = "raise",
dialect: str | csv.Dialect | Type[csv.Dialect] = "excel",
**csv_dialect_kwargs: Unpack[aiocsv.protocols.CsvDialectKwargs],
)
一个对象,它将 CSV 行写入给定的异步文件。在此对象中,“行”是从字段名到值的映射。
额外的关键字参数传递到底层的 csv.DictWriter 实例。
方法:
async writeheader(self) -> None
:将标题行写入指定的文件。async writerow(self, row: Mapping[str, Any]) -> None
:将一行写入指定的文件。async writerows(self, rows: Iterable[Mapping[str, Any]]) -> None
:将多行写入指定的文件。
属性:
fieldnames
:序列,用于标识在将行写入底层文件时值的顺序restval
:当行中的键不在字段名中时使用的占位符值,默认为""
extrasaction
:当一行中存在不在字段名中的键时采取的操作,默认为"raise"
,它会在额外键上引发 ValueError,也可以设置为"ignore"
来忽略任何额外键writer
:链接到底层的AsyncWriter
只读属性:
dialect
:链接到底层的 csv.reader 的dialect
属性
aiocsv.protocols.WithAsyncRead
一个 typing.Protocol
,描述了一个可以读取的异步文件。
aiocsv.protocols.WithAsyncWrite
描述可异步写入的文件的 typing.Protocol
。
aiocsv.protocols.CsvDialectArg
dialect
参数的类型,用于 csv
模块。
aiocsv.protocols.CsvDialectKwargs
csv
模块在读取器/写入器实例化期间用于覆盖方言设置的键值对参数。
开发
欢迎贡献,但请在之前提交问题。 aiocsv
被设计为内置 csv
的替代品,任何后者没有的功能都将被拒绝。
从源代码构建
要创建一个 wheel(以及源代码压缩包),运行 python -m build
。
对于本地开发,请使用 虚拟环境。 pip install --editable .
将构建 C 扩展并将其提供给当前的 venv。这是运行测试所必需的。然而,由于 Python 打包混乱,这将强制进行优化构建,而不包含调试符号。如果您需要调试 aiocsv 的 C 部分,并使用例如调试符号构建库,唯一合理的做法是运行 python setup.py build --debug
,然后手动将共享对象/DLL 从 build/lib*/aiocsv
复制到 aiocsv
。
测试
该项目使用 pytest 和 pytest-asyncio 进行测试。在以上述方式安装库后运行 pytest
。
代码风格检查与其他工具
该库使用 black 和 isort 进行格式化,并在严格模式下使用 pyright 进行类型检查。
对于库的 C 部分,请使用 clang-format 进行格式化和 clang-tidy 进行代码风格检查,然而这些工具尚未集成到 CI 中。
安装所需的工具
pip install -r requirements.dev.txt
将安装上述所有开发工具,但这可能不是必需的,具体取决于您的设置。例如,如果您使用带有 Python 扩展的 VS Code,pyright 已经捆绑在内,不需要再次安装。
推荐的 VS Code 设置
使用 Python、Pylance(应与 Python 扩展自动安装),以及 black 和 isort Python 扩展。
您需要从 requirements.dev.txt
安装所有开发依赖项,除了 pyright
。推荐的 .vscode/settings.json
{
"C_Cpp.codeAnalysis.clangTidy.enabled": true,
"python.testing.pytestArgs": [
"."
],
"python.testing.unittestEnabled": false,
"python.testing.pytestEnabled": true,
"[python]": {
"editor.formatOnSave": true,
"editor.codeActionsOnSave": {
"source.organizeImports": "always"
}
},
"[c]": {
"editor.formatOnSave": true
}
}
对于库的 C 部分,C/C++ 扩展 就足够了。请确保您的系统已安装 Python 标头。通常需要安装单独的包,例如 python3-dev,有关此信息,请咨询您的系统仓库。需要在 .vscode/c_cpp_properties.json
中手动包含 Python 标头在 includePath
下。在我的特定系统中,此配置文件如下所示
{
"configurations": [
{
"name": "Linux",
"includePath": [
"${workspaceFolder}/**",
"/usr/include/python3.11"
],
"defines": [],
"compilerPath": "/usr/bin/clang",
"cStandard": "c17",
"cppStandard": "c++17",
"intelliSenseMode": "linux-clang-x64"
}
],
"version": 4
}
项目详情
下载文件
下载适用于您平台的文件。如果您不确定选择哪个,请了解更多关于 安装包 的信息。
源代码发行版
构建版本
aiocsv-1.3.2.tar.gz的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 806d93465c7808d58d3ff0d2bba270fb4d04b934be6a1e95d0834c50a510910e |
|
MD5 | d0e3ff1a8929c64cebebddbf2c97bda6 |
|
BLAKE2b-256 | 3378bd4a85d195e57e72837415ef81d26ce6db6fdf185dce8d4f6a7c099ed4af |
aiocsv-1.3.2-cp312-cp312-win_amd64.whl 的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 59b0ea2d9e73539d4c1276467c4457acafa995717ea1b5340f3737f2cde2f71a |
|
MD5 | ccadcca20e29f6e31674ee5864ef84a1 |
|
BLAKE2b-256 | 1339ee5645807a947736c87ab7c0dfcdbceb7d7f8d1d31cb7d52992cbd5d6d44 |
aiocsv-1.3.2-cp312-cp312-musllinux_1_1_x86_64.whl 的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 8c7aee34ceff4eaa654f01acbdba648297f5f9532dc7a23fac62defec28e0fe5 |
|
MD5 | 89cc6797c32f6f918e2bf2f8605eb7e5 |
|
BLAKE2b-256 | c21967edf04b47168a2639d73ebaae25f2459d7284d10a5e7a2fef72a69bb31e |
aiocsv-1.3.2-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl 的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 10780033a1ed3da825f2256449d177b7106b3c5a2d64bd683eab37f1fdee1e36 |
|
MD5 | bd06255b6c00723de3447b1a83c74916 |
|
BLAKE2b-256 | 946fcb2d7b751a03433a30e7a645f0b3a126f5f2ecb0947c3da5a04496c06767 |
aiocsv-1.3.2-cp312-cp312-macosx_10_9_x86_64.whl 的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | db943a463cb6828ba81bd7c083c6dd4c96edac4880b8638af81798d694405e26 |
|
MD5 | aea2a53654d6c0146c634b186162057e |
|
BLAKE2b-256 | 52b548e8b825d8ec9ffbb47ebbc381702d5dfb59ef01ad00174bf43123b860cf |
aiocsv-1.3.2-cp311-cp311-win_amd64.whl 的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 9edb342b0d7dba94d8976f46ba5814b8d8704d67a45e1b8a6579ab0ba04309e7 |
|
MD5 | 5bc715ff6481f50f6e39f510ee7f907e |
|
BLAKE2b-256 | 33e65e661bc89cd094a7d92f5883c16f9651a52c4a8f38623c8de1851d7ffa84 |
aiocsv-1.3.2-cp311-cp311-musllinux_1_1_x86_64.whl 的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | e9c98f8d760add0b52274523baa4b81dde4a3c96f79222d3d4d6965bac9cdcbd |
|
MD5 | 00907af2f9be0a51db4ee85077a3eebb |
|
BLAKE2b-256 | 41c20f7d38cf5411350b8448f7c5c77f65247224fa96edfc7a5e997deb5fc96d |
aiocsv-1.3.2-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl 的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 4004569bff39cb839a335b8f673a6496fd5b0b6e074c7adb7aee4a0c8379ea22 |
|
MD5 | 8fda36188e6a38e5b6f392483a57a8d8 |
|
BLAKE2b-256 | 0dbc2659b85488b520d66b31ac83f42f7493653f61a4941b4f0807f3f73bd3e0 |
aiocsv-1.3.2-cp311-cp311-macosx_10_9_x86_64.whl 的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 7c25ad8afbf79d28ec3320e608c7f38d3eff93e96ebbbd2430ae8fa0f6e7631b |
|
MD5 | 4be4351b9c09792ee644f33b20f3d1de |
|
BLAKE2b-256 | d6b3548e5b377f65d3ae02c0674a54de76c150c8d050f4fe7b0e43be866ba1be |
aiocsv-1.3.2-cp310-cp310-win_amd64.whl 的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 198c905ec29897c347bf9b18eb410af13d7ac94a03d4b673e64eaa5f4557c913 |
|
MD5 | afeb7f59b676d58b52b29c26440b902c |
|
BLAKE2b-256 | ac69d6da552b7fe5d2908c9bfbcc62c100cf19eaaf711a213cb9f84448569765 |
aiocsv-1.3.2-cp310-cp310-musllinux_1_1_x86_64.whl 的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 2f921828e386bb6945ed7d268e1524349ea506974ae35b9772542714f0ef3efd |
|
MD5 | b4b76880f5d8e4c22f108ba4fc0a6079 |
|
BLAKE2b-256 | 661be03e1469ff228ac0a2c852d6fadfeebacd347f11f7aedd5818f7d42e0ba1 |
aiocsv-1.3.2-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl 的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | bdd688dbc1723f2b3a433e42041ceb9c9a8fe70f547d35b2da4ea31e4c78efc5 |
|
MD5 | 60bfbf2ebb140a2fbb811730eff6407b |
|
BLAKE2b-256 | 7dd5616a3d7b07558ee1010cf233784bf1a6844b0664e92a489a380b887ff773 |
aiocsv-1.3.2-cp310-cp310-macosx_10_9_x86_64.whl 的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | f1996ac960c196aecc7d22e701c273a2676d13bf25575af78d4e515fc724ef20 |
|
MD5 | e292bc2c742439f7cca2b985635f4def |
|
BLAKE2b-256 | 5bacf16d8ac8f340f84102294837cbf1ee8a30a211270f49f91ccc084f0bea93 |
哈希值 用于 aiocsv-1.3.2-cp39-cp39-musllinux_1_1_x86_64.whl
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 2ef14fa0839394ecc52274ea538b12b7b2e756eb0f514902a8fb391612161079 |
|
MD5 | 543ced95b28dcbf97b7b65fddfa54a1d |
|
BLAKE2b-256 | ce688da12acd1af5b2f954be683fe24a998161c78f08f4b0ff788c1992ec3902 |
哈希值 用于 aiocsv-1.3.2-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 9c3e5a817b3489283cc1fd80f8ba56431d552dc9ea4e539c0069d8d56bf0fba7 |
|
MD5 | 77f871c8aa630996ab35925241b9cfb7 |
|
BLAKE2b-256 | 4304e6597b11c7e274a3f3f34db30702f33ec25b7513a23fa3bba8b3160aff2a |
哈希值 用于 aiocsv-1.3.2-cp39-cp39-macosx_10_9_x86_64.whl
算法 | 哈希摘要 | |
---|---|---|
SHA256 | dfd2ef214b6d7944991f62ac593ad45bdaf0ed9f5741c8441ee7de148e512fe7 |
|
MD5 | 7c1b03510328099bb2b1da7cd22c5034 |
|
BLAKE2b-256 | 5d489c943de5d9437ef66b3e79cc6f011fe4466c99b274ee9e227e734ac2a421 |
哈希值 用于 aiocsv-1.3.2-cp38-cp38-musllinux_1_1_x86_64.whl
算法 | 哈希摘要 | |
---|---|---|
SHA256 | d125286f971e0038e8872f31b6f1cd6184b9c508445e6633f075d8b543b444bc |
|
MD5 | 379c2e0891991e128db63e0ffede08a8 |
|
BLAKE2b-256 | 6fc5b79a031e733f63c767c9a51a0f13b8e2e84b82c89ca67725be1ba788e627 |
哈希值 用于 aiocsv-1.3.2-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 9aa9629c8a1c07e9d02c7d80d84f021f7994fe30d021f13ac963e251b54724ef |
|
MD5 | f1dbb5ddc035bb955f03692f5a2f1173 |
|
BLAKE2b-256 | 0b4404c10f8504fbce091e7df1f8e27923e5017aef7eec56ff4775d8f8c0112f |
哈希值 用于 aiocsv-1.3.2-cp38-cp38-macosx_10_9_x86_64.whl
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 1c7d1700b8de16f25b24bfcebfc2b0817b29ce413f6961f08d5aa95bf00a6862 |
|
MD5 | 1d6d52a4b44d4c43958afcfb7d742d7b |
|
BLAKE2b-256 | 6b6968459f9a556be05a467b544f49149dc3709e3ecd927e530424daae5df2f2 |