Openpyxl+itertools照合入金金額
8968 ワード
プロジェクトの需要はeasyで、ある日、プロジェクトの同僚は私に多くのお金が来たと言ったが、これらのお金は会社の財務支出の時に合併して支出された.支出されたプロジェクトがどのプロジェクトなのか分からないほどだ.プロジェクトが多すぎて、人工的に組み合わせを行う作業量が大きすぎるので、プログラミングでこの問題を解決したいと思っています.
文書ディレクトリプロジェクト需要 素材 実装プロセス openpyxlの使用 itertoolsの使用 後続の思考 プロジェクト要件プロジェクトの需要:表1には多くの金額リストがあり、表2にも多くの金額リスト がある.表1の各金額は、表2の2つ以上の金額を組み合う となる.対応関係 を解く
素材両表 pythonプログラム openpyxlモジュールおよびitertoolsモジュール インプリメンテーションプロセス
Openpyxlの使用
Openpyxlはpythonのモジュールで、excelテーブルを操作するのに便利で、データ処理に使用できます.
以上のコードにより、2つのexcelテーブルデータをメモリにインポートできました.データ量が少ないので、すべてメモリで計算しても問題ありません.データ量が大きい場合は、この方法を慎むと、高度な手段を取らなければなりません.
itertoolsの使用
私はその中のcombinations()だけを使って、異なる組み合わせを返します.
出力結果は以下の通りです.
(1, 2) (1, 3) (1, 4) (2, 3) (2, 4) (3, 4)
わかりました.この問題はもう解けました.遍歴すれば終わりだ
後続の思考
私は菜鶏で、頭がないだけです.今日はitertoolsモジュールを使わなければ、私はどのように組み合わせ数を実現すればいいか考えています.その後、私は雛形を持っていましたが、実践に移しませんでした.m個の数の中からn個の数の組み合わせは、まず1つの数を確定してから、別のn-1個の数の組み合わせを確定することに相当し、この状況はm回繰り返します.2つの数の組み合わせを求めるまで押すと、まず1つの数を確定し、別の数を選ぶことになります.
これは実は1つの典型的な再帰思想で、しかしどうして分からないで、私にそれを実現させて、私は何も考えられなくて、その上最近確かにまだ比較的に忙しいです.暇があったらitertoolsモジュールのcombinationsのソースコードを読んでください.私の個人的なアップグレードに役立つでしょう.
文書ディレクトリ
素材
Openpyxlの使用
Openpyxlはpythonのモジュールで、excelテーブルを操作するのに便利で、データ処理に使用できます.
import itertools
from openpyxl import load_workbook
# excel
excel1 = load_workbook(" .xlsx")
# sheet
sheet = excel1.get_sheet_names()[1]
sheet = excel1.active
#
data1 = dict()
for i in sheet['C']:
if type(i.value) == type(3.14):
data1['C' + str(i.row)] = i.value
excel1.close()
print(data1)
excel2 = load_workbook(" .xlsx")
sheet = excel2.get_sheet_names()[0]
sheet = excel2.active
data2 = dict()
for i in sheet['P']:
if type(i.value) == type(3.14):
data2['P' + str(i.row)] = i.value
excel2.close()
print(data2)
以上のコードにより、2つのexcelテーブルデータをメモリにインポートできました.データ量が少ないので、すべてメモリで計算しても問題ありません.データ量が大きい場合は、この方法を慎むと、高度な手段を取らなければなりません.
itertoolsの使用
私はその中のcombinations()だけを使って、異なる組み合わせを返します.
L = [1, 2, 3, 4]
for i in itertools.combinations(L, 2):
print(i)
出力結果は以下の通りです.
(1, 2) (1, 3) (1, 4) (2, 3) (2, 4) (3, 4)
わかりました.この問題はもう解けました.遍歴すれば終わりだ
for x in range(2, len(data2)):
L = itertools.combinations(data2, x)
for numbers in data1:
for i in L:
key = 0
for j in i:
key += j[1]
if abs(data1[numbers] - key) < 0.01:
print(numbers, data1[numbers], i, key, sep=' ')
後続の思考
私は菜鶏で、頭がないだけです.今日はitertoolsモジュールを使わなければ、私はどのように組み合わせ数を実現すればいいか考えています.その後、私は雛形を持っていましたが、実践に移しませんでした.m個の数の中からn個の数の組み合わせは、まず1つの数を確定してから、別のn-1個の数の組み合わせを確定することに相当し、この状況はm回繰り返します.2つの数の組み合わせを求めるまで押すと、まず1つの数を確定し、別の数を選ぶことになります.
これは実は1つの典型的な再帰思想で、しかしどうして分からないで、私にそれを実現させて、私は何も考えられなくて、その上最近確かにまだ比較的に忙しいです.暇があったらitertoolsモジュールのcombinationsのソースコードを読んでください.私の個人的なアップグレードに役立つでしょう.