177

私はPythonが初めてです。プログラムからスプレッドシートにデータを書き込む必要があります。オンラインで検索したところ、利用可能なパッケージがたくさんあるようです (xlwt、XlsXcessive、openpyxl)。.csv ファイルに書き込むことを提案する人もいます (CSV を使用したことがなく、それが何であるかをよく理解していません)。

プログラムはとてもシンプルです。2 つのリスト (フロート) と 3 つの変数 (文字列) があります。2 つのリストの長さはわかりませんが、おそらく同じ長さではないでしょう。

下の写真のような配置にしたいです。

レイアウトサンプル

ピンクの列には最初のリストの値が含まれ、緑の列には 2 番目のリストの値が含まれます。

では、これを行う最善の方法は何ですか?

PS Windows 7 を実行していますが、このプログラムを実行しているコンピューターに Office がインストールされているとは限りません。

import xlwt

x=1
y=2
z=3

list1=[2.34,4.346,4.234]

book = xlwt.Workbook(encoding="utf-8")

sheet1 = book.add_sheet("Sheet 1")

sheet1.write(0, 0, "Display")
sheet1.write(1, 0, "Dominance")
sheet1.write(2, 0, "Test")

sheet1.write(0, 1, x)
sheet1.write(1, 1, y)
sheet1.write(2, 1, z)

sheet1.write(4, 0, "Stimulus Time")
sheet1.write(4, 1, "Reaction Time")

i=4

for n in list1:
    i = i+1
    sheet1.write(i, 0, n)



book.save("trial.xls")

私はあなたのすべての提案を使用してこれを書きました。それは仕事を成し遂げますが、少し改善することができます。

for ループで作成されたセル (list1 値) を科学的または数値としてフォーマットするにはどうすればよいですか?

値を切り捨てたくありません。プログラムで使用される実際の値は、小数点以下約 10 桁になります。

4

12 に答える 12

159

pandasの DataFrame.to_excel を使用します。Pandas を使用すると、機能豊富なデータ構造でデータを表すことができ、 Excel ファイルでも読み取ることができます。

最初にデータを DataFrame に変換してから、次のように Excel ファイルに保存する必要があります。

In [1]: from pandas import DataFrame
In [2]: l1 = [1,2,3,4]
In [3]: l2 = [1,2,3,4]
In [3]: df = DataFrame({'Stimulus Time': l1, 'Reaction Time': l2})
In [4]: df
Out[4]: 
   Reaction Time  Stimulus Time
0              1              1
1              2              2
2              3              3
3              4              4

In [5]: df.to_excel('test.xlsx', sheet_name='sheet1', index=False)

出てくるExcelファイルは次のようになります。

ここに画像の説明を入力

両方のリストは同じ長さである必要があることに注意してください。そうしないと、パンダが文句を言います。これを解決するには、欠損値をすべて に置き換えますNone

于 2012-11-18T05:51:44.010 に答える
105
import xlwt

def output(filename, sheet, list1, list2, x, y, z):
    book = xlwt.Workbook()
    sh = book.add_sheet(sheet)

    variables = [x, y, z]
    x_desc = 'Display'
    y_desc = 'Dominance'
    z_desc = 'Test'
    desc = [x_desc, y_desc, z_desc]

    col1_name = 'Stimulus Time'
    col2_name = 'Reaction Time'

    #You may need to group the variables together
    #for n, (v_desc, v) in enumerate(zip(desc, variables)):
    for n, v_desc, v in enumerate(zip(desc, variables)):
        sh.write(n, 0, v_desc)
        sh.write(n, 1, v)

    n+=1

    sh.write(n, 0, col1_name)
    sh.write(n, 1, col2_name)

    for m, e1 in enumerate(list1, n+1):
        sh.write(m, 0, e1)

    for m, e2 in enumerate(list2, n+1):
        sh.write(m, 1, e2)

    book.save(filename)

詳細については、 https ://github.com/python-excel をご覧ください。

于 2012-11-18T05:32:43.713 に答える
39
  • xlrd/xlwt (標準): Python の標準ライブラリにはこの機能はありませんが、xlrd/xlwtは Excel ファイルを読み書きする「標準的な」方法だと思います。ワークブックの作成、シートの追加、データ/数式の書き込み、セルの書式設定はかなり簡単です。これらすべてが必要な場合は、このライブラリで最も成功する可能性があります。代わりに openpyxl を選択することもでき、非常に似ていると思いますが、私は使用していません。

    xlwt でセルを書式設定するにXFStyleは、シートに書き込むときにスタイルを定義して含めます。これは、多くの数値形式の例です。以下のコード例を参照してください。

  • Tablib (強力で直感的): Tablibは、表形式のデータを操作するためのより強力でありながら直感的なライブラリです。複数のシートを含む Excel ワークブックや、csv、json、yaml などの他の形式を作成できます。書式設定されたセル (背景色など) が必要ない場合は、このライブラリを使用することをお勧めします。

  • csv (簡単): コンピューター上のファイルは、テキストまたはバイナリのいずれかです。テキスト ファイルは、改行やタブなどの特殊な文字を含む単なる文字であり、どこでも簡単に開くことができます (メモ帳、Web ブラウザー、または Office 製品など)。csv ファイルは、特定の方法でフォーマットされたテキスト ファイルです。各行は、コンマで区切られた値のリストです。Python プログラムはテキストを簡単に読み書きできるため、csv ファイルは、Python プログラムから Excel (または別の Python プログラム) にデータをエクスポートする最も簡単で最速の方法です。

    Excel ファイルはバイナリであり、ファイル形式を認識している特別なライブラリが必要です。そのため、Python 用の追加のライブラリや、Microsoft Excel、Gnumeric、LibreOffice などの特別なプログラムを使用して読み取り/書き込みを行う必要があります。


import xlwt

style = xlwt.XFStyle()
style.num_format_str = '0.00E+00'

...

for i,n in enumerate(list1):
    sheet1.write(i, 0, n, fmt)
于 2012-11-18T06:37:34.520 に答える
14

Python 用のいくつかの Excel モジュールを調査したところ、openpyxlが最適であることがわかりました。

無料の書籍 Automate the Boring Stuff with Pythonには、openpyxl に関する詳細な章があり、 Read the Docsサイトを確認することもできます。openpyxl を使用するために Office や Excel をインストールする必要はありません。

プログラムは次のようになります。

import openpyxl
wb = openpyxl.load_workbook('example.xlsx')
sheet = wb.get_sheet_by_name('Sheet1')

stimulusTimes = [1, 2, 3]
reactionTimes = [2.3, 5.1, 7.0]

for i in range(len(stimulusTimes)):
    sheet['A' + str(i + 6)].value = stimulusTimes[i]
    sheet['B' + str(i + 6)].value = reactionTimes[i]

wb.save('example.xlsx')
于 2015-04-30T23:34:15.933 に答える
11
import xlsxwriter


# Create an new Excel file and add a worksheet.
workbook = xlsxwriter.Workbook('demo.xlsx')
worksheet = workbook.add_worksheet()

# Widen the first column to make the text clearer.
worksheet.set_column('A:A', 20)

# Add a bold format to use to highlight cells.
bold = workbook.add_format({'bold': True})

# Write some simple text.
worksheet.write('A1', 'Hello')

# Text with formatting.
worksheet.write('A2', 'World', bold)

# Write some numbers, with row/column notation.
worksheet.write(2, 0, 123)
worksheet.write(3, 0, 123.456)

# Insert an image.
worksheet.insert_image('B5', 'logo.png')

workbook.close()
于 2016-09-09T17:33:32.123 に答える
11

CSV はコンマ区切り値を表します。CSV はテキスト ファイルのようなもので、.CSV 拡張子を追加するだけで簡単に作成できます。

たとえば、次のコードを記述します。

f = open('example.csv','w')
f.write("display,variable x")
f.close()

このファイルはエクセルで開くことができます。

于 2012-11-18T05:31:48.360 に答える
0

l1正確な数値をインポートする最も簡単な方法は、との数値の後に小数点を追加することl2です。Python は、この小数点を、正確な数値を含めるようにというユーザーからの指示として解釈します。小数点以下の桁数に制限する必要がある場合は、出力を制限する印刷コマンドを作成できるはずです。次のような簡単なものです。

print variable_example[:13]

データに小数点以下2つの整数があると仮定すると、小数点以下10桁に制限されます。

于 2015-07-28T21:45:13.140 に答える