web-dev-qa-db-ja.com

ExcelワークシートをCSVとして保存する方法

Excelスプレッドシートを読み取り、そのワークシートの一部をCSVファイルとして保存するPythonスクリプトを記述したいと思います。

これどうやってするの?

PythonからExcelファイルを読み書きするための サードパーティモジュール を見つけましたが、私が知る限り、Excel(つまり* .xls)形式でのみファイルを保存できます。ここで私が間違っている場合は、これらのモジュールで実行しようとしていることを実行する方法を示すいくつかのサンプルコードをいただければ幸いです。

私も遭遇しました 1つの解決策 完全には理解できませんが、Windows固有であるように思われ、Unixでこれを実行したいので、とにかく助けにはなりません。とにかく、Windowsでも、このソリューションを拡張して自分のやりたいことを実行できるかどうかははっきりしません。

18
kjo

行ごとに説明されている2つのライブラリを使用した最も基本的な例:

  1. XLSワークブックを開く
  2. 最初のスプレッドシートを参照する
  3. バイナリで開き、ターゲットのcsvファイルを書き込みます
  4. デフォルトのcsvライターオブジェクトを作成する
  5. 最初のスプレッドシートのすべての行をループする
  6. 行をcsvにダンプします

import xlrd
import csv

with xlrd.open_workbook('a_file.xls') as wb:
    sh = wb.sheet_by_index(0)  # or wb.sheet_by_name('name_of_the_sheet_here')
    with open('a_file.csv', 'wb') as f:   # open('a_file.csv', 'w', newline="") for python 3
        c = csv.writer(f)
        for r in range(sh.nrows):
            c.writerow(sh.row_values(r))

import openpyxl
import csv

wb = openpyxl.load_workbook('test.xlsx')
sh = wb.get_active_sheet()
with open('test.csv', 'wb') as f:  # open('test.csv', 'w', newline="") for python 3
    c = csv.writer(f)
    for r in sh.rows:
        c.writerow([cell.value for cell in r])
40
Boud

pandasの使用は少し短くなります:

import pandas as pd

df = pd.read_Excel('my_file', sheetname='my_sheet_name')  # sheetname is optional
df.to_csv('output_file_name', index=False)  # index=False prevents pandas to write row index

# oneliner
pd.read_Excel('my_file', sheetname='my_sheet_name').to_csv('output_file_name', index=False)
12
FabienP

xlrd または openpyxl モジュールを使用して、それぞれxlsまたはxlsxドキュメントを読み取り、 csv 書き込むモジュール。

あるいは、 Jython を使用している場合、 Apache POI ライブラリを使用して.xlsまたは.xlsxを読み取ることができ、ネイティブCSVモジュールは引き続き利用可能です。

5
Charles Duffy

まず、ExcelスプレッドシートをPandasに読み込みます。以下のコードは、ExcelスプレッドシートをPandasとしてOrderedDictとしてインポートします。これには、すべてのワークシートがDataFramesとして含まれます。次に、worksheet_nameをキーとして使用します特定のワークシートにDataFrameとしてアクセスし、df.to_csv()を使用して必要なワークシートのみをcsvファイルとして保存します。これがあなたのケースでうまくいくことを願っています。

import pandas as pd
df = pd.read_Excel('YourExcel.xlsx', sheet_name=None)
df['worksheet_name'].to_csv('output.csv')  
0
Ashu007