2017-01-04 4 views
1

コマンドラインからではなく、csvkitをライブラリとして使用して、指定されたExcelファイルをCSVに変換しようとしています。私はライブラリの使用法の構文に関する情報を見つけるのが難しいです。誰でもこの目的のためのライブラリとしてcsvkitを使用する方法についていくつかの光を当てることができますか?Csvkit Library使用法

私のテストケースは単純です。input.xlsxまたはinput.xlsをとり、output.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) 

を同様の質問hereあります

Traceback (most recent call last): 
    File "excelconvert.py", line 6, in <module> 
    reader = in2csv(csvfile) 
NameError: name 'in2csv' is not defined 

与えるが、答えはただのドキュメントを参照するように見えることのいずれかISN」実際にはライブラリの使用法を説明していないので、クラスをリストするだけです。構文が上記の試みを行うために使用したcsvモジュールと似ているかもしれないと示唆している回答がありますが、私はどこにもいません。

+0

ファイルを読み込もうとしていますか?またはそれをCSVに変換しますか?あなたがリンクしている文書から判断すると、それはコマンドラインユーティリティとして使われることになっているようです。 – mwm314

+0

私はそれを変換しようとしています。ファイルがオープン/コンバートされているかどうかを調べるための読み込みラインがあります。 – Marcatectura

+0

ドキュメントのようにコマンドラインから使えない理由がありますか?これは、Pythonライブラリとして使用するためのものではありません。 – mwm314

答えて

2

ドキュメントは、これがコマンドラインツールであることを強く示唆しており、Pythonインタプリタの内部からは使用しないことを強くお勧めします。あなたは、コマンドラインからcsvファイルにファイルを変換するために、このような何かを行うことができます(または、シェルスクリプトでそれをポップできます):

in2csv your_file.xlsx > your_new_file.csv 

ファイルを読みたい場合は、単にこれを行う(それはです)あなたが持っているものに似ていますが、ちょうど使用ビルトインのPython、いかなる外部モジュールを必要としません:

with open('input.xlsx') as csvfile: 
    reader = csvfile.readlines() # This was the only line of your code I changed 
    # below is just to test whether the file could be accessed 
    for row in reader: 
     print(row) 

それとも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() 

1 O上記のスニペットはおそらく必要なものですが、実際に罰を求めている場合は、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から直接in2csvインポートすることはできません。 (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行から呼び出されるように設計されています(argsは、それをcmd行から呼び出すと定義されています)。このようなことが起こったようですが、徹底的にテストしませんでした。

>>> 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() 
関連する問題