回答
这不像打开一个纯文本文件那么简单,并且需要某种外部模块,因为没有内置任何内容来执行此操作。这里有一些选择:
如果可能的话,你可能要考虑导出Excel电子表格为CSV文件,然后使用内置Python的csv模块来阅读:
好吧我真的不知道CSV的东西我如何让python打开我的excel文件作为csv模块?我有一个程序,做我想要的txt文件,我希望它做对于这个excel文件同样的事情...这是最好的方式去?你能详细说明这个吗? – novak 2010-07-13 17:00:35
你可以使用像xlrd这样的第三方python模块,或者将你的excel文件保存为一个CSV文件,而不是一个普通的Excel文件。我认为你缺少的一点是,一个excel文件与纯文本文件没有相似之处。在记事本中打开Excel文档,你会明白我的意思。您可能需要将文件以CSV(逗号分隔值)等纯文本格式保存,这可以通过python更容易阅读,也可以安装和使用第三方模块来为您解析Excel文件。 – 2010-07-13 17:06:27
我遇到的问题是文件非常大。如果我无法完全打开文件,如何将文件另存为CSV格式? – novak 2010-07-13 17:12:55
[编辑] - 从我可以看到你的评论,像下面的代码片段可能会做的伎俩。我在这里假设你只是在'john'这个单词中搜索一列,但是你可以添加更多或者将它变成一个更通用的函数。
from xlrd import open_workbook
book = open_workbook('simple.xls',on_demand=True)
for name in book.sheet_names():
if name.endswith('2'):
sheet = book.sheet_by_name(name)
# Attempt to find a matching row (search the first column for 'john')
rowIndex = -1
for cell in sheet.col(0): #
if 'john' in cell.value:
break
# If we found the row, print it
if row != -1:
cells = sheet.row(row)
for cell in cells:
print cell.value
book.unload_sheet(name)
我想这可能是我想要它做的: from xlrd import open_workbook book = open_workbook(' ()) if name.endswith('2'): sheet = book.sheet_by_name(name) print sheet.cell_value(0,0) book.unload_sheet(name) large_files.py 但我不希望它使用endwith我希望它找到并打印包含一个particilar名称的行......就像我想要它打印巨大的Excel表格的行,包含约翰的数据而不是鲍勃的数据。帮帮我? – novak 2010-07-13 17:04:16
我建议你发布这个作为一个单独的问题,并将代码放在代码块中。 – 2010-07-13 23:27:45
这是一系列相关问题的第二个问题;在第三个问题中,显示真正的excel文件据称是1.5 GB,并且计算机的内存被描述为“不够”......参见 http://stackoverflow.com/questions/3241039/how-doi-i-使用python提取特定行数据的方法 – 2010-07-14 00:33:18
可以使用pandas
package以及....
当你与一个Excel工作多张文件,可以使用:
import pandas as pd
xl = pd.ExcelFile(path + filename)
xl.sheet_names
>>> [u'Sheet1', u'Sheet2', u'Sheet3']
df = xl.parse("Sheet1")
df.head()
df.head()
将打印前5行的Excel文件
如果您使用的是带单张工作表的Excel文件,则可以简单地使用:
import pandas as pd
df = pd.read_excel(path + filename)
print df.head()
使用很多工作表时,这是理想的选择。 – 2014-02-26 13:06:16
这个解决方案让我满意。与openpyxl,我遇到了以下问题:“InvalidFileException:openpyxl不支持旧的.xls文件格式,请使用xlrd读取此文件,或将其转换为更新的.xlsx文件格式”。另一方面,熊猫可以处理.xls和.xlsx文件......读取整个表格只需要一行代码。 – nathanielng 2016-02-17 08:00:43
您需要安装可选的依赖关系['xlrd'](https://pypi.python.org/pypi/xlrd)来读取Excel文件,['xlwt'](https://pypi.python.org/ pypi/xlwt)用于编写Excel文件。 – Flimm 2017-02-01 16:19:30
可以使用仅需要xlrd的xlpython包。 在此查找https://pypi.python.org/pypi/xlpython 这里https://github.com/morfat/xlpython
其文档还有的openpxyl包:
>>> from openpyxl import load_workbook
>>> wb2 = load_workbook('test.xlsx')
>>> print wb2.get_sheet_names()
['Sheet2', 'New Title', 'Sheet1']
>>> worksheet1 = wb2['Sheet1'] # one way to load a worksheet
>>> worksheet2 = wb2.get_sheet_by_name('Sheet2') # another way to load a worksheet
>>> print(worksheet1['D18'].value)
3
>>> for row in worksheet1.iter_rows():
>>> print row[0].value()
import pandas as pd
import os
files = os.listdir('path/to/files/directory/')
desiredFile = files[i]
filePath = 'path/to/files/directory/%s'
Ofile = filePath % desiredFile
xls_import = pd.read_csv(Ofile)
现在你可以使用熊猫DataFrames的力量!
问题是关于读取Excel文件,而不是逗号分隔的文本文件。熊猫似乎有一个函数('pandas.read_excel')。 – Bart 2015-12-02 18:41:03
此代码适用于Python 3.5.2。它打开并保存并超越。我目前正在研究如何将数据保存到文件中,但是这是代码:
import csv
excel = csv.writer(open("file1.csv", "wb"))
- 1. 如何在Python中快速打开excel文件?
- 2. 如何用win32com打开在python中写保留的excel文件?
- 3. 如何在python中打开.MSG文件
- 4. 如何在python中打开文件?
- 5. 如何在python中打开ANS文件?
- 6. 在Python中打开文件
- 7. 在Python中打开文件
- 8. 在Python中打开文件
- 9. 在Python中打开文件
- 10. 如何在宏Excel中检测打开的Excel文件?
- 11. Excel无法打开文件xlsxwriter python
- 12. python打开最新的excel文件
- 13. 打开excel文件并写入python
- 14. 使用Python打开多个excel文件
- 15. 打开Excel文件
- 16. 打开excel文件
- 17. 在Excel中打开iPad中的文件?
- 18. 如何使用VBA在Excel中打开(实际打开)文本文件?
- 19. 如何从QTP Resultsviewer打开Excel文件
- 20. 如何用Excel打开XML文件?
- 21. 如何从weka打开excel文件
- 22. 如何从Sharpoint打开Excel文件
- 23. 如何从MS Access打开Excel文件?
- 24. 如何通过servlet打开Excel文件
- 25. 如何从Excel中的excel文件中读取时未打开
- 26. 在Python中的excel文件中打开工作表
- 27. 从VB.NET在Excel中打开.txt文件
- 28. 在vb.net中声明/打开excel文件
- 29. 在c中打开一个Excel文件#
- 30. 使用Java在Excel中打开文件
哪个版本的Excel?如果您可以限制自己打开由Ecel 2007或2010创建的Excel文件,则应该可以将大部分或全部文件解析为XML。 – 2010-07-13 16:30:56
它的excel 2003 :( – novak 2010-07-13 17:00:58