使用 python 2.7/pyMel 从 Excel 中提取信息?

Posted

技术标签:

【中文标题】使用 python 2.7/pyMel 从 Excel 中提取信息?【英文标题】:Extract information from Excel with python 2.7/ pyMel? 【发布时间】:2015-04-15 22:22:33 【问题描述】:

我知道这要求很多,但我已经研究了很多在 Excel 文档中使用 python 查找列或查找行的方法。

但是,当我无权访问这些解决方案时,您需要导入不同的包。我这样做的主要动机是利用文档中列出的带有着色器的预制 excel 文档,并根据简短的搜索提取它们。

那么,有没有人成功地使用 python 来读取一个 excel 文档,如果是的话,你是否能够将命名行与命名列进行匹配?


编辑: 选择答案是因为它是最接近的解决方案,尽管它不一定回答我的问题。但是,考虑到用户和他/她的 excel 文档将使用相同的列和行来获取可用数据库的上下文,它仍然会提供一个非常合理的解决方案。

TL;DR:

在不使用外部包的情况下,很难将列与行进行比较以获取数据集。将数据提取为数组并指定哪个“列”更容易。

【问题讨论】:

能否提供excel文档的截图?只是为了看看数据是如何格式化的,在哪些单元格中等等......然后我会给你一个答案。我曾多次使用 Excel&Python,但从未找到一种无需导入任何包即可本地读取 Excel 文件的方法。如果我必须在某些软件包(xlwings、openpyxl 和 win32api)之间进行推荐,我会选择 openpyxl 就是这样,我不能使用其他软件包。 excel 的屏幕截图不起作用,但我可以制作一个模拟版本,这样你就明白我要做什么了——我会在今晚晚些时候发布。 我在下面的 csv 模块答案下发布了一个 excel 文档供您查看。 【参考方案1】:

您也可以使用内置的csv module读取CSV文件来读取CSV文件,因此无需安装任何外部模块。

import csv
with open('names.csv') as csvfile:
     reader = csv.DictReader(csvfile)
     for row in reader:
         print(row['first_name'], row['last_name'])

如果您只是抓取阅读器的全部内容并将它们填充到一个列表中,那么列表将包含所有行,并且每一行将是使用第一行中的标题的字典。到达特定单元格类似于:

records = []
with open('names.csv') as csvfile:
     reader = csv.reader(csvfile)
     for row in reader:
         records.append(row)

# cel "A4" would be
records[0][3]

【讨论】:

是的,我不久前正在检查。它工作得非常好,除了我需要交叉检查一些变量或获取一组在几个单元格之间变化的特定信息。 那么是什么阻止您使用 CSV 模块实现这一目标。你能给出一个具体的用例和一个示例数据以及你想要实现的目标吗? i.imgur.com/jAynP3A.png 抱歉格式蹩脚,但 excel 就是 excel……这是我能做到的最好的……快。 M1-M5(代表材料)需要与序列号或代号交叉核对。由于 CSV 模块只读取行,我无法将实际材料与“M-#”进行交叉检查。这个想法是我可以利用 Maya 中的交叉检查系统来提取正确的材质名称。我希望这更有意义......如果需要,请询问。 让我重申一下,M1-M5 可能并不总是列在单元格 H 到 L 下。因此,执行上述操作将是一项艰巨的任务。 似乎您必须做的是创建一个特定于文件的查找表。首先收集所有数据,然后获取看起来像实际标题行的数据,然后制作一个表格,其中标题行内容作为键,它们的物理位置作为值。然后只需使用该查找表来搜索未来的行。或者,只需找到该行并将其重新导出并在第二个 CSV 之后进行,因此真正的标题是第一行【参考方案2】:

我将我的 excel 文件保存为 .csv 文件,并使用 numpy.genfromtxt 导入数据并使用 delimiter=',' 参数解析测试文件。

例如:

import numpy
data = numpy.genfromtxt("my_file.csv", delimiter=",")
# do stuff with data

【讨论】:

【参考方案3】:

模块 xlrd 已经在 python 包中并且非常易于使用:

import xlrd
xlsFile = xlrd.open_workbook(path)
sheetName = xlsFile.sheets()[0].name

for s in xlsFile.sheets():
    for row in range(s.nrows):
        print s.cell(row, 1)

【讨论】:

Xlrd 不是 Python 标准库的一部分。 确实,我在一台奇怪的模块的计算机上尝试了代码。【参考方案4】:

1。安装

Maya 在所有受支持的平台上使用 Python 2.7.11 版。 适用于 Maya 的独立 Python shell 在 Windows 上名为 mayapy.exe,位于 D:\Program Files\Autodesk\Maya2017\bin\mayapy.exe。 放到系统环境路径下。

如果找不到pip.exe,请转到https://pip.pypa.io/en/stable/installing/并下载get-pip.py

从控制台:

C:\Users\JM-FF>python get-pip.py

成功安装 pip 后,pip.exe 位于D:\Program Files\Autodesk\Maya2017\Python\Scripts。把这个放到系统环境路径下。

安装 XlsxWriter:

C:\Users\JM-FF>pip install XlsxWriter

2。步骤

现在在 ScriptEditor 中打开你的 Maya,写下:


import xlsxwriter

workbook = xlsxwriter.Workbook('hello.xlsx')
worksheet = workbook.add_worksheet()
worksheet.write(11,3,"hello")
workbook.close()

现在您可以使用 Python 从 Maya 读取数据并将数据写入 Excel。

hello.xlsx 位于D:\Program Files\Autodesk\Maya2017\bin

【讨论】:

以上是关于使用 python 2.7/pyMel 从 Excel 中提取信息?的主要内容,如果未能解决你的问题,请参考以下文章

系统自动化~02 Python操作EXC表格(入门)

python异常处理之traceback.print_exc()跟traceback.format_exc()

创建 QtChart 对象会在运行时创建 EXC_BAD_ACCESS 错误

python 上下文管理协议

python 捕捉错误,exception,traceback和sys.exc_info()比较

使用python从hive中检索数据时出错