質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

解決済

2回答

2959閲覧

pythonのfor文を使ってなぜexcelのデータを全取得できるのか

tetsuya7724

総合スコア67

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

0グッド

0クリップ

投稿2021/05/11 02:32

前提・実現したいこと

pythonの勉強中です。以下のサイトを使って勉強しているのですが、for文で理解できないところがあります。

https://fastclassinfo.com/entry/python_excel_tenki/#5

「プログラム4|シート1のデータをリスト化」のところでfor文を使っているのですが、なぜこの構文でexcelのデータを全取得できているのかがわかりません。

配列に入れる値を取得していることは何となくわかるのですが、なぜこの文で順番に配列に入れることができているのでしょうか?

初心者で申し訳ないのですが、pythonをきちんと理解したいので、ご教授のほどよろしくお願いします。

該当のソースコード

html

1#プログラム1|ライブラリの設定 2from openpyxl import load_workbook 3from datetime import datetime 4 5#プログラム2|対象エクセルのファイルパスを指定(ここでは「sample.xlsx」) 6filepath = 'sample.xlsx' 7 8#プログラム3|「sample.xlsx」を開いて指定して読み込む 9wb = load_workbook(filename=filepath) 10ws1 = wb['Sheet1'] 11ws2 = wb['template'] 12 13#プログラム4|シート1のデータをリスト化 14values1=[[cell.value for cell in row1] for row1 in ws1] 15 16#プログラム5|取引先のリストを作成 17del values1[0] 18conv_values1 = list(zip(*values1)) 19torihiki_list = list(set(conv_values1[0])) 20 21#プログラム6|取引先ごとに処理 22for torihiki in torihiki_list: 23 24 # プログラム7|空リストを作成 25 product_data =[] 26 27 # プログラム8|取引先とマッチングする行をproduct_dataのリストに格納 28 for i in range(len(values1)): 29 if values1[i][0] == torihiki: 30 product_data.append(values1[i]) 31 32 # プログラム9|templateシートをコピー 33 ws3 = wb.copy_worksheet(ws2) 34 ws3.title = torihiki 35 36 # プログラム10|プログラム8で格納したリストをエクセルへ出力 37 for y, row in enumerate(product_data): 38 for x, cell in enumerate(row): 39 ws3.cell(row= y+2, column= x+1, value=product_data[y][x]) 40 41 42# プログラム11|エクセルファイルの保存 43now = datetime.now() 44hiduke = now.strftime('%Y-%m-%d') 45filename = hiduke + '_' + 'Excel.xlsx' 46wb.save(filename)

試したこと

ここに問題に対して試したことを記載してください。

macOS Big Sur 11.2.3

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

pythonをきちんと理解したい,とのことですね。

まず、Pythonには文と式があることを理解してください。

文(statement)とは、実行(execute)するものです。
式(expression)は評価(evaluate)して値を持つものです。代入文の右辺になることができます。

厳密なことを知りたければ公式ドキュメントの以下の部分を読めば良いのですが、最初は読みにくいかもしれません。

6. 式 (expression)
7. 単純文 (simple statement)
8. 複合文 (compound statement)

values1=[[cell.value for cell in row1] for row1 in ws1]
は代入文です。
その右辺の[[cell.value for cell in row1] for row1 in ws1]はif文ではありません。
内包表記と呼ばれる式です。

内包表記については、以下をお読みください。

5.1.3. リストの内包表記

単純な例を書いて起きます。

python

1>>> data1 = [0, 1, 2, 3] 2>>> print([x+2 for x in data1]) 3[2, 3, 4, 5] 4>>> print([x*2 for x in data1]) 5[0, 2, 4, 6] 6>>> 7>>> data2 = ['a', 'bc', 'def'] 8>>> print([x+':'+str(len(x)) for x in data2]) 9['a:1', 'bc:2', 'def:3']

投稿2021/05/11 03:33

ppaul

総合スコア24670

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

ベストアンサー

リストの内包表記をしています。for文の基本を理解されているのであれば、
pythonの内包表記を少し詳しく
などでこの表記の概観を掴まれると良いかもしれません。

投稿2021/05/11 02:36

kay_ventris4

総合スコア269

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問