2017-10-01 10 views
0

私はPythonを初めて使い、Pythonを使用して読みたいExcelシートで作業しています。私は行をリストのリストに読みたい。私はOpenpyxlを使用してこれを試しましたExcelシートからopenpyxlを使用してリストのリストに行を読み取る

rows_iter = ws.iter_rows(min_col = 1, min_row = 2, max_col = 11, max_row = ws.max_row) 

val1 = [[cell.value for cell in row] for row in rows_iter] 

しかし、これは私の内側のリストとしてすべての行の単一のリストを提供します。

条件に応じて、15または12または10行からなる異なるリストを作成したいと考えています。

私を助けてください。 サンプルのExcelファイル、取得された出力と予想される出力は次のとおりです。 Expected outputおよびobtained op。私は2つ以上の添付ファイルを添付することができません! ありがとうございます!

+0

簡単なスプレッドシートの例のスクリーンショットと予想される出力と実際に出力した内容を投稿して質問を明確にすることができますか? – charlesreid1

+0

うれしい私は助けることができました!下の回答があなたのために働いた場合は、その横にあるチェックマークをクリックして、質問に答えたことを示してください。また、[誰かが私の質問に答えるときにどうすればいいですか?](https://stackoverflow.com/help/someone-answers)も参照してください。 – charlesreid1

+0

私が正しく理解しているなら、あなたは '[list1、list2、list3、list4、list5、list6]'のような長いリストを取って、それを '[[list1、リスト2]] [[リスト3、リスト4]] [[リスト5、リスト6]] '? – charlesreid1

答えて

0
rows_iter = ws.iter_rows(min_col = 1, min_row = 2, max_col = 11, max_row = ws.max_row) 

val_intermediate = [[cell.value for cell in list(row)] for row in rows_iter] 

# This would be set to whatever cell value contains N 
N = ws['A1'].value 

# This splits your shallow list of lists into a list of N lists of lists (!) 
val1 = [val_intermediate[j:j+N] for j in range(1,len(val_intermediate),N)] 

説明:最初のリスト内包は、リストの浅いリストを返します。 2番目のリストの理解は、リストの浅いリストを、N個のエントリーであるリストのリストのグループに変換します。それはあなたがあなたの浅いを分割することで、正確な場所を選ぶことができる方法ですので、range(1,len(a),N)はN番号をスキップし、1からlen(a)に整数のシーケンスを作成します

In [1]: a = [['a','b','c'],['d','e','f'],['g','h','i'],['j','k','l'] ['m','n','o'],['p','q','r']] 

In [2]: N=2; [a[j:j+N] for j in range(1,len(a),N)] 

Out[2]: 
[[['d', 'e', 'f'], ['g', 'h', 'i']], 
[['j', 'k', 'l'], ['m', 'n', 'o']], 
[['p', 'q', 'r']]] 

In [3]: N=3; [a[j:j+N] for j in range(1,len(a),N)] 

Out[3]: 
[[['d', 'e', 'f'], ['g', 'h', 'i'], ['j', 'k', 'l']], 
[['m', 'n', 'o'], ['p', 'q', 'r']]] 

:これはどのように機能するかを確認するには、このサンプル・データを検討リストのリスト。それは[j:j+N]の索引付けのためにN-1項目をつかむ。