使用Python从Excel中提取列

我有一个Excel文件ff:row / col结构

ID English Spanish French 1 Hello Hilo Halu 2 Hi Hye Ghi 3 Bus Buzz Bas 

我想读取Excel文件,提取行和列值,并根据英文,西class牙文和法文列创build3个新文件。

所以我会有这样的东西:

英文档案:

 "1" = "Hello" "2" = "Hi" "3" = "Bus" 

我一直在使用xlrd。 我可以打开,阅读和打印文件的内容。 但是,这是我使用这个命令(Excel文件已经打开):

 for index in xrange(0,2): theWord = '\n' + str(sh.col_values(index, start_rowx=index, end_rowx=1)) + '=' + str(sh.col_values(index+1, start_rowx=index, end_rowx = 1)) print theWord 

OUTPUT:

 [u'Parameter/Variable/Key/String']=[u'ENGLISH'] <-- is this a list?, didn't the str() use to strip it out? 

你在那里做什么? 我怎样才能删除方括号?

u意味着它是一个unicodestring,当你调用str()时候它会被放到那里。 如果你把这个string写到一个文件里,它就不会在那里。 你得到的是从列中的1行。 这是因为你正在使用end_rowx=1它返回一个元素的列表。

尝试获取列值列表:

 ids = sh.col_values(0, start_rowx=1) english = sh.col_values(1, start_rowx=1) spanish = sh.col_values(2, start_rowx=1) french = sh.col_values(3, start_rowx=1) 

然后你可以将它们zip成元组列表:

 english_with_IDS = zip(ids, english) spanish_with_IDS = zip(ids, spanish) french_with_IDS = zip(ids, french) 

其中的forms是:

 ("1", "Hello"),("2", "Hi"), ("3", "Bus") 

如果你想打印对:

 for id, word in english_with_IDS: print id + "=" + word 

col_values返回列值的列表,如果你想单个值,你可以调用sh.cell_value(rowx, cellx)

 import xlrd sh = xlrd.open_workbook('input.xls').sheet_by_index(0) english = open("english.txt", 'w') spanish = open("spanish.txt", 'w') french = open("french.txt", 'w') try: for rownum in range(sh.nrows): english.write(str(rownum)+ " = " +str(sh.cell(rownum, 0).value)+"\n") spanish.write(str(rownum)+ " = " +str(sh.cell(rownum, 1).value)+"\n") french.write(str(rownum)+ " = " +str(sh.cell(rownum, 2).value)+"\n") finally: english.close() spanish.close() french.close() 

使用pandas :

 In [1]: import pandas as pd In [2]: df = pd.ExcelFile('test.xls').parse('Sheet1', index_col=0) # reads file In [3]: df.index = df.index.map(int) In [4]: for col in df.columns: ...: column = df[col] ...: column.to_csv(column.name, sep='=') # writes each column to a file ...: # with filename == column name In [5]: !cat English # English file content 1=Hello 2=Hi 3=Bus