小智 42
使用熊猫:
import pandas as pd
xls = pd.ExcelFile("yourfilename.xls")
sheetX = xls.parse(2) #2 is the sheet number
var1 = sheetX['ColumnName']
print(var1[1]) #1 is the row number...
Run Code Online (Sandbox Code Playgroud)
Som*_*mil 23
python xlrd库可以更好地解决这个问题
pip install xlrd
Run Code Online (Sandbox Code Playgroud)
打开工作簿
import xlrd
Run Code Online (Sandbox Code Playgroud)
按名称打开表格
workbook = xlrd.open_workbook('your_file_name.xlsx')
Run Code Online (Sandbox Code Playgroud)
按索引打开表格
worksheet = workbook.sheet_by_name('Name of the Sheet')
Run Code Online (Sandbox Code Playgroud)
读取单元格值
worksheet = workbook.sheet_by_index(0)
Run Code Online (Sandbox Code Playgroud)
我认为熊猫是最好的选择。关于使用函数的Pandas ,这里已经有了一个答案ExcelFile,但是它对我来说无法正常工作。从这里我发现了可以read_excel正常工作的函数:
import pandas as pd
dfs = pd.read_excel("your_file_name.xlsx", sheet_name="your_sheet_name")
print(dfs.head(10))
Run Code Online (Sandbox Code Playgroud)
PS您需要xlrd安装才能read_excel正常工作
对于 xlsx,我喜欢之前发布的解决方案https://web.archive.org/web/20180216070531//sf/ask/305981441/。我只使用标准库中的模块。
def xlsx(fname):
import zipfile
from xml.etree.ElementTree import iterparse
z = zipfile.ZipFile(fname)
strings = [el.text for e, el in iterparse(z.open('xl/sharedStrings.xml')) if el.tag.endswith('}t')]
rows = []
row = {}
value = ''
for e, el in iterparse(z.open('xl/worksheets/sheet1.xml')):
if el.tag.endswith('}v'): # Example: <v>84</v>
value = el.text
if el.tag.endswith('}c'): # Example: <c r="A3" t="s"><v>84</v></c>
if el.attrib.get('t') == 's':
value = strings[int(value)]
letter = el.attrib['r'] # Example: AZ22
while letter[-1].isdigit():
letter = letter[:-1]
row[letter] = value
value = ''
if el.tag.endswith('}row'):
rows.append(row)
row = {}
return rows
Run Code Online (Sandbox Code Playgroud)
添加的改进包括按工作表名称获取内容、使用 re 获取列以及检查是否使用共享字符串。
def xlsx(fname,sheet):
import zipfile
from xml.etree.ElementTree import iterparse
import re
z = zipfile.ZipFile(fname)
if 'xl/sharedStrings.xml' in z.namelist():
# Get shared strings
strings = [element.text for event, element
in iterparse(z.open('xl/sharedStrings.xml'))
if element.tag.endswith('}t')]
sheetdict = { element.attrib['name']:element.attrib['sheetId'] for event,element in iterparse(z.open('xl/workbook.xml'))
if element.tag.endswith('}sheet') }
rows = []
row = {}
value = ''
if sheet in sheets:
sheetfile = 'xl/worksheets/sheet'+sheets[sheet]+'.xml'
#print(sheet,sheetfile)
for event, element in iterparse(z.open(sheetfile)):
# get value or index to shared strings
if element.tag.endswith('}v') or element.tag.endswith('}t'):
value = element.text
# If value is a shared string, use value as an index
if element.tag.endswith('}c'):
if element.attrib.get('t') == 's':
value = strings[int(value)]
# split the row/col information so that the row leter(s) can be separate
letter = re.sub('\d','',element.attrib['r'])
row[letter] = value
value = ''
if element.tag.endswith('}row'):
rows.append(row)
row = {}
return rows
Run Code Online (Sandbox Code Playgroud)
您可以使用此处列出的任何库(例如基于 JExcelApi 的Pyxlreader或xlwt),以及COM 自动化来使用 Excel 本身来读取文件,但为此您将引入 Office 作为软件的依赖项,这可能并不总是一个选择。
| 归档时间: |
|
| 查看次数: |
187747 次 |
| 最近记录: |