Csvkit图书馆使用

2024-04-25 05:59:44 发布

您现在位置:Python中文网/ 问答频道 /正文

我想用csvkit作为库,而不是从命令行将给定的excel文件转换为csv。我找不到任何有关库使用语法的信息。有人能解释一下如何使用csvkit作为这个库吗?在

我的测试用例很简单输入.xlsx或者输入.xls,转换并另存为输出.csv. 以下是我迄今为止根据其他地方的建议所做的尝试:

import csvkit

with open('input.xlsx') as csvfile:
    reader = in2csv(csvfile)
    # below is just to test whether the file could be accessed
    for row in reader:
        print(row)

给予

^{pr2}$

有一个类似的问题here,但答案似乎只是参考了文档,这些文档要么没有更新,要么实际上没有解释库的用法语法,它只是列出了类。有一个答案表明,语法可能类似于csv模块,这是我在上面尝试过的,但是我没有得到任何结果。在


Tags: 文件csvcsvfile答案文档命令信息语法
1条回答
网友
1楼 · 发布于 2024-04-25 05:59:44

文档强烈建议这是一个命令行工具,而不是从Python解释器内部使用。您可以执行类似的操作,从命令行将文件转换为csv(也可以在shell脚本中弹出):

in2csv your_file.xlsx > your_new_file.csv

如果您想读取该文件,只需这样做(它与您拥有的类似,但不需要任何外部模块,只需使用内置的Python):

^{pr2}$

或者可以使用os模块调用命令行:

# Careful, raw sys call. Use subprocess.Popen 
# if you need to accept untrusted user input here
os.popen("in2csv your_file.xlsx > your_new_file.csv").read()

上面的一个片段可能就是您需要的,但是如果您真的在寻找惩罚,您可以尝试从解释器内部使用in2csv文件。你可以这样做(在我能找到的文档中没有对此的支持,只是我在翻译程序中四处闲逛):

>>> from csvkit import in2csv
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ImportError: cannot import name in2csv
>>> import csvkit
>>> help(csvkit)
Help on package csvkit:

NAME
    csvkit

FILE
    c:\python27\lib\site-packages\csvkit\__init__.py

DESCRIPTION
    This module contains csvkit's superpowered alternative to the standard Python
    CSV reader and writer. It can be used as a drop-in replacement for the standard
    module.

    .. warn::

        Since version 1.0 csvkit relies on `agate <http://agate.rtfd.org>`_'s
    CSV reader and writer. This module is supported for legacy purposes only and you
    should migrate to using agate.

PACKAGE CONTENTS
    cleanup
    cli
    convert (package)
    exceptions
    grep
    utilities (package)

所以您不能直接从csvkit导入in2cv(因为它没有列在PACKAGE CONTENTS下面)。但是,如果您稍微搜索一下,就会发现您可以从csvkit.utilities访问该包。但从现在开始,情况只会变得更糟。如果您像上面那样做更多的“帮助查找”(即从解释器调用帮助),您将发现该类是为从命令行使用而设计的。所以从口译员内部使用真的很麻烦。下面是一个尝试使用默认值(导致爆炸)的示例:

>>> from csvkit.utilities import in2csv
>>> i = in2csv.In2CSV()
>>> i.main()
usage:  [-h] [-d DELIMITER] [-t] [-q QUOTECHAR] [-u {0,1,2,3}] [-b]
        [-p ESCAPECHAR] [-z FIELD_SIZE_LIMIT] [-e ENCODING] [-S] [-H] [-v]
        [-l] [ zero] [-f FILETYPE] [-s SCHEMA] [-k KEY] [ sheet SHEET]
        [-y SNIFF_LIMIT] [ no-inference]
        [FILE]
: error: You must specify a format when providing data via STDIN (pipe).

看看in2csv.py文件模块中,您必须对args进行猴子补丁,以使它在解释器内部执行您想要的操作。同样,这并不是为了在解释器内部使用而设计的,而是为了从cmd行调用而设计的(因此,如果从cmd行调用args是定义的)。像这样的东西似乎在运行,但我没有彻底测试:

>>> from csvkit.utilities import in2csv
>>> i = in2csv.In2CSV()
>>> from collections import namedtuple
>>> i.args = namedtuple("patched_args", "input_path filetype no_inference")
>>> i.args.input_path = "/path/to/your/file.xlsx"
>>> i.args.no_inference = True
>>> i.args.filetype = None
>>> i.main()

相关问题 更多 >