1

単一シートのExcelファイルがいくつかあり、サブリストを含むリストを作成したいと思います。各サブリストには、1)ファイル名、2)シート名、および3)最初の(ヘッダー)行を除くシートの各行の行値が含まれている必要があります。私は次のことを試しました:

rdir=r"d:\temp"
import xlrd,spss
fils=[fil for fil in os.listdir(rdir) if fil.endswith(".xls")]
allData=[]
for cnt,fil in enumerate(fils):
    wb=xlrd.open_workbook(os.path.join(rdir,fil))
    allData.append([fil]+[wb.sheets()[0].name]+wb.sheets()[0].row_values(row) for row in range(1,wb.sheets()[0].nrows))

これは私が探しているリストではなく、代わりにジェネレータオブジェクトのリストを提供します。ここで何が間違っているのでしょうか。探しているリストを取得するにはどうすればよいですか。

4

3 に答える 3

2

リストの理解が間違っているようです。それは読むべきです:

    allData.append([fil]+[wb.sheets()[0].name]+[wb.sheets()[0].row_values(row) for row in range(1,wb.sheets()[0].nrows)])

また、 s1 = wb.sheets()[0] を確立して、コードを読みやすくし、少し速くすることをお勧めします

rdir=r"d:\temp"
import xlrd,spss
fils=[fil for fil in os.listdir(rdir) if fil.endswith(".xls")]
allData=[]
for cnt,fil in enumerate(fils):
    wb=xlrd.open_workbook(os.path.join(rdir,fil))
    s1 = wb.sheets()[0]
    allData.append([fil]+[s1.name]+[s1.row_values(row) for row in range(1,s1.nrows)])

また、コメントで、複数のシートでこれを行う方法を見たいと述べました。それぞれのフィールドが同じであると仮定すると、これを使用できます。

rdir=r"d:\temp"
import xlrd,spss
fils=[fil for fil in os.listdir(rdir) if fil.endswith(".xls")]
allData=[]
for cnt,fil in enumerate(fils):
    wb=xlrd.open_workbook(os.path.join(rdir,fil))
    for sheet in wb.sheets():
        allData.append([fil]+[sheet.name]+[sheet.row_values(row) for row in range(1,sheet.nrows)])
于 2012-12-05T07:50:33.653 に答える
2

あなたが何を望んでいるのかわからない、問題はリスト内包表記に [] がないことだと思います。

allData.append([fil]+[wb.sheets()[0].name]+ [ wb.sheets()[0].row_values(row) for row in range(1,wb.sheets()[0].nrows) ] )

次に、最終的なリストは ["Filename","WorksheetName",[row_value list]] になります。

簡単にしましょう:

>>> list_a = [1,2,3]
>>> list_b = [ ['a','b','c'],['a','b','c'],['a','b','c']]
>>> [list_a + x for x in list_b]
[[1, 2, 3, 'a', 'b', 'c'], [1, 2, 3, 'a', 'b', 'c'], [1, 2, 3, 'a', 'b', 'c']]
>>> [list_a + [ x for x in list_b ] ]
[[1, 2, 3, ['a', 'b', 'c'], ['a', 'b', 'c'], ['a', 'b', 'c']]] 
于 2012-12-05T07:44:53.057 に答える
0

皆様、ご協力ありがとうございました!必要なリストは、によって生成されます

rdir=r"d:\temp"
import xlrd,spss
fils=[fil for fil in os.listdir(rdir) if fil.endswith(".xls")]
allData=[]
for cnt,fil in enumerate(fils):
    wb=xlrd.open_workbook(os.path.join(rdir,fil))
    ws=wb.sheets()[0]
    for row in range(1,ws.nrows):
        allData.append([fil]+[ws.name]+[val for val in ws.row_values(row)])
于 2012-12-05T10:42:54.553 に答える