2017-02-22 8 views
2

をxlrdのpythonを使用してCSVファイルに...私はそこに道の99%だ

wr.writerow(sh.row_values(rownum))を使用して
def xl_to_csv(xl_file): 
    wb = xlrd.open_workbook(xl_file) 
    sh = wb.sheet_by_index(0) 
    output = 'output.csv' 
    op = open(output, 'wb') 
    wr = csv.writer(op, quoting=csv.QUOTE_ALL) 

    for rownum in range(sh.nrows): 
     part_number = sh.cell(rownum,1) 
     #wr.writerow(sh.row_values(rownum)) #writes entire row 
     wr.writerow(part_number) 
    op.close() 

をXLSXファイルの単一の列を書く私は、ExcelファイルからCSVへの行全体を書き込むことができますしかし150列のようなものがあり、私はそれらのうちの1つだけを必要とします。だから、私はpart_number = sh.cell(rownum,1)を使ってほしい1つの列をつかんでいますが、この変数をCSVファイルに書き出すのに正しい構文を得ることができません。ここで

は、トレースバックです:引数がリストのようなオブジェクトでなければなりません

wr.writerow([part_number.value]) 

Traceback (most recent call last): 
    File "test.py", line 61, in <module> 
    xl_to_csv(latest_file) 
    File "test.py", line 32, in xl_to_csv 
    wr.writerow(part_number) 
_csv.Error: sequence expected 
+0

あなたは現在何を持っていますか?エラーが発生した場合は、そのエラーを質問に追加してください。また、どの列(1番目または2番目)を取得しようとしていますか? – Abdou

+0

注意事項:単一の列のcsvファイル(またはその他の区切り文字)は単なるテキストファイルです。引用は必要ありません。デリミタは使用されません。 –

+0

@StevenRumbalskiそれは良い点です...私は2番目のフィールドを追加するつもりですが、出力をテストする前に最初のフィールドを追加している可能性があります(複数行の文字列がない限り、これは真です)。 ... –

答えて

2

はこれを試してみてください。

1

最速修正がであなたのpartnumを投げることですlist(そして、あなたは、細胞の外に値を取得するために.valueを追加する必要がアブドゥあたりとして):

より一般的に
for rownum in range(sh.nrows): 
    part_number = sh.cell(rownum,1).value # added '.value' to get value from cell 
    wr.writerow([part_number]) # added brackets to give writerow the list it wants 

、あなたがリストを使用することができますあなたが望む列をつかむための理解:

cols = [1, 8, 110] 
for rownum in range(sh.nrows): 
    wr.writerow([sh.cell(rownum, colnum).value for colnum in cols]) 
+0

これは優れており、本当に役に立ちます。ありがとう、スティーブン! –

関連する問題