Python中的“_csv”是啥?

Posted

技术标签:

【中文标题】Python中的“_csv”是啥?【英文标题】:What is "_csv" in Python?Python中的“_csv”是什么? 【发布时间】:2012-10-09 05:24:05 【问题描述】:

在尝试阅读 csv.py 文件的源代码(作为在另一个上下文中实现我自己的 writer 类的指南)时,我发现该文件中的许多功能反过来是从某些东西导入的叫_csv:

 from _csv import Error, __version__, writer, reader, register_dialect, \
                  unregister_dialect, get_dialect, list_dialects, \
                  field_size_limit, \
                  QUOTE_MINIMAL, QUOTE_ALL, QUOTE_NONNUMERIC, QUOTE_NONE, \
                  __doc__

我在我的系统上找不到任何具有此名称的文件(包括搜索具有隐藏属性集的文件),尽管我可以从 Python shell 执行 import _csv

这个模块是什么,可以阅读吗?

【问题讨论】:

【参考方案1】:

答案已被接受,但我想补充一些细节,因为我和 OP 有同样的问题。

.csv 文件的内容只是一个带有值的逗号分隔文档:

first,last
john,doe
...

您可以通过在记事本中打开一个 .csv 文件来进行测试

如果你想创建一个 .csv 文件,你可以写入它,你会得到你想要的 csv 文件。

with open('test.csv', 'w') as file:
    file.write('first,last\n')
    file.write('John,Doe\n')

如果您想在不使用“import csv”的情况下写入 .csv 文件,这是一种简单的解决方案。

【讨论】:

这与问题无关,该问题与 Python 中的特定内置模块有关,与扩展名为 csv1 的文件的内容无关。它至少也很不完整,因为它没有讨论嵌入式逗号和引用的问题,这是 csv 处理的核心。 @LarryLustig 你是对的,你问了一个问题,而我的回答并没有回答所提出的问题。但是阅读问题,总体目标是编写自己的“作家”。我偶然发现了这个线程,因为我正在寻找同样的东西,然后意识到它是多么容易实现。所以我发布了这个例子给其他任何找到这个线程的人。我还举了一个非常基本的例子,像我那样嵌入逗号没有问题;这超出了重点。【参考方案2】:

_csvcsv 模块的C“主干”。它的来源在Modules/_csv.c。你可以从 Python 命令提示符找到这个模块的编译版本:

>>> import _csv
>>> _csv
<module '_csv' from '/usr/lib/python2.6/lib-dynload/_csv.so'>

Python 源代码中没有隐藏文件 :)

【讨论】:

更重要的是,根据Jython docs,绝对不能直接引用它。这就是 csv.py 导入其功能的原因。 谢谢。这也解释了为什么我找不到对 Writer 类的任何引用——“类”是用 C 实现的。 嗯。我假设模块是 Python 源代码分发的一部分,并且生成的目标代码链接到 Python 可执行文件?我的 Python27 目录中既没有 Module 子目录,也没有很多 C 代码(站点包中只有几个文件)。 @LarryLustig:是的,在源代码中。查看更新的答案。 在 Windows 上运行,我看不到该目录 (lib-dynload) 或名称中带有 _csv 的任何文件。没关系,因为我正在寻找 Writer 模式的 Python 示例。感谢您的帮助!【参考方案3】:

不同意拉尔斯曼的回答。

在PEP8中有官方对模块命名约定的解释:

当用 C 或 C++ 编写的扩展模块附带提供更高级别(例如更面向对象)接口的 Python 模块时,C/C++ 模块具有前导下划线(例如 _socket)

【讨论】:

+1,我不知道那是在 PEP8 中(尽管我在自己的 C 扩展中使用了约定)。

以上是关于Python中的“_csv”是啥?的主要内容,如果未能解决你的问题,请参考以下文章

Python TypeError:“_csv.writer”对象不可迭代

python csv文件打开错误:_csv.Error: line contains NULL byte

将 .csv 文件从 URL 读取到 Python 3.x - _csv.Error:迭代器应返回字符串,而不是字节(您是不是以文本模式打开文件?)

python有关csv文件的记录

python中的“容器”到底是啥? (以及所有的 python 容器类型是啥?)

将多个CSV文件导入具有相同名称的变量