我正在尝试编写一个python脚本来操作excel电子表格。
假设是,我是否有样本数据:
Gene chrom strand TSS TES Name
NM_145215 chr5 + 135485168 135488045 Abhd11
NM_1190437 chr5 + 135485021 135488045 Abhd11
NM_1205181 chr14 + 54873803 54888844 Abhd4
NM_134076 chr14 + 54878906 54888844 Abhd4
NM_9594 chr2 + 31615464 31659747 Abl1
NM_1112703 chr2 + 31544075 31659747 Abl1
NM_207624 chr11 + 105829258 105851278 Abl1
NM_9598 chr11 + 105836521 105851278 Ace2
NM_1130513 chrX + 160577273 160626350 Ace2
NM_27286 chrX + 160578411 160626350 Ace2
对于那些相似的名称(第6列),我想检索具有最少TSS的整行。 例如,对于前两行-Abhd11名称,我想在结果中保存第二行,因为TSS 135485021< 135485168.等等所有具有相同名称的集合。
任何想法和评论都表示赞赏。
答案 0 :(得分:4)
输入
如果可能的话,我会将excel文件保存为csv文件,然后使用csv
module加载到python中。
或者你可以使用xlrd
module for reading excel files - 虽然我没有使用过这个但对它不太了解。
openpyxl
是解析excel文件的另一个选项(欢呼另一个笨蛋)。
<强>操纵强>
ernie的想法似乎可行,我将按如下方式实施。 假设linesreadfromfile
是使用csv.reader
读取的列表列表,即每个列表元素是与文件中该行的分隔条目对应的值列表,
finaldict = {}
for row in linesreadfromfile:
if finaldict.has_key(row[5]):
if finaldict[row[5]][3] > row[3]:
finaldict[row[5]] = row
else:
finaldict[row[5]] = row
答案 1 :(得分:2)
我同意mutzmatron并会推荐xlrd
模块。这是一个简单的例子:
import xlrd
# Create your file handle
file_handle = xlrd.open_workbook(file_name)
# Use the first page in the spreadsheet (0-based indexes)
sheet = file_handle.sheet_by_index(0)
# Create dictionary for storing values
abc = {}
# Loop through every row
for i in range(sheet.nrows):
line = sheet.row_values(i)
# Get your 'Name' and 'TSS' columns
name = line[5]
tss = line[3]
# Add this 'Name' to your dictionary if it's new, or keep the max value
if name not in abc.keys():
abc[name] = tss
else:
abc[name] = max(abc[name],tss)
显然根据您的规格更改了您需要保存的内容(完整行,某些值等)。
---编辑---
# If this 'Name' is new, save this line
if name not in abc.keys():
abc[name] = {'tss': tss, 'line': line}
# Else, if this 'Name' is not new and the TSS is less, keep this new line
elif tss < abc[name]['tss']:
abc[name]['line'] = line
答案 2 :(得分:0)
您可以使用IronSpread为您提供python控制台以及在python中编写此类操作的方法。它还支持可以作为普通excel函数使用的UDF,这很不错。
答案 3 :(得分:0)
您可以使用Python Tool for Visual Studio团队提供的Pyvot。它提供了一个全面的API,用于处理CPython中的Excel电子表格。
您可以从PyPi获取代码:http://pypi.python.org/pypi/Pyvot 您可以从Pytools网站获取文档:http://pytools.codeplex.com/wikipage?title=Pyvot