我有这个工作:
address = []
for row in ws.iter_rows(row_offset=4,column_offset=3):
if len(row) > 0:
cell = row[2]
if cell.internal_value is not None:
*something here, append appropriate cell values to address*
print address
return address
将成功浏览Excel电子表格中的列并获取每个非空单元格。但是,在星号中,我不确定如何通过the output并仅提取数字。我知道阅读可能很奇怪,但我需要的数字是“1.0,2.0,3.0,4.0等”。当我在不同的电子表格中阅读时,所有其他部分和实际数字本身都会发生变化,但它们的格式相同。
所以我需要知道的是我将如何通过这个列表并删除所有不是十进制数的东西,并理想地将这些小数转换为整数。
我也确定使用列表理解有一个很好的方法,但是我只在python中编程一周,所以我不确定如何真正做到这一点。
很抱歉,如果这令人困惑,请提前感谢您的帮助。
答案 0 :(得分:1)
There's no excellent way of checking if a string is a float in Python,但这应该足够了。
>>> def is_float(n):
... try:
... float(n)
... return True
... except ValueError:
... return False
>>> x = ["garbage", "1.0", "trash", "2.0"]
>>> [i for i in x if is_float(i)]
['1.0', '2.0']
答案 1 :(得分:1)
你可以这样做:
int_values = [int(v) for v in cell.internal_values if type(v) == float]
或者,我注意到这些值由一个项目分隔,因此您可能也需要这样:
int_values = [int(cell.internal_values[i]) for i in xrange(1, len(cell.internal_values), 2)]
(您可能需要使用范围( 1 ,...),因为第一个应该被丢弃,模式从索引1开始。)
答案 2 :(得分:0)
所以我需要知道的是我将如何通过这个列表并摆脱它 所有不是十进制数的东西,理想情况下转换那些 小数转换成整数。
由于您的列表包含浮点数而不是浮点数字符串:
only_floats = [i for i in big_list if isinstance(float,i)]
答案 3 :(得分:0)
我将此答案添加为“第一部分”,以防将来有人需要第一部分的解决方案。问题的第二部分(将float转换为int)在接受的答案中。
为了删除所有浮动,原始算法被修改为:
addr = []
for row in ws.iter_rows(row_offset=4,column_offset=3):
if row:
cell = row[2]
try:
addr.append(float(cell.internal_value))
except ValueError:
pass
except TypeError:
pass
address = [int(v) for v in addr if type(v) == float]
最后一行是接受答案的代码。算法修订实际上是其他人的工作,但帖子被删除了!谢谢神秘用户,我希望我能相信你。