我正在使用Python进行数据分析项目。我有一个.xls文件,我需要阅读并从每一行获取某些信息。我正在使用xlrd。
当我在记事本中打开文件时,前十行是关于文件包含内容的注释,然后我得到实际数据。如何跳过以“#”开头的所有行?
此外,一旦我到达行,我想遍历每一行并分离每行的每一列中的元素,并将其添加到每列的字典中。如何根据列分隔每行中的数据?
截至目前,这是我的代码:
peaksheets = peakfile.sheet_by_name("Sheet1")
num_rows = peaksheets.nrows -1
curr_row = -1
while curr_row < num_rows:
curr_row +=1
row = str(peaksheet.row(curr_row))
words = row.strip().split('\t')
c = words[0]
s = int(words[1])
运行代码时,我也遇到以下错误:
xlrd.biffh.XLRDError: Unsupported format, or corrupt file: Expected BOF record; found '# This f'
这就是为什么我想跳过以“#”符号开头的行。
答案 0 :(得分:1)
尝试使用pandas将文件读取到数据帧。如果您确实需要字典中的数据,可以将其传递给数据框中的数据。
background-image
答案 1 :(得分:0)
这个怎么样?
peaksheets = peakfile.sheet_by_name("Sheet1")
dict_data = {}
num_rows = peaksheets.nrows -1
curr_row = -1
while curr_row < num_rows:
curr_row +=1
# we want to skip the comments
if row.startswith('#'):
continue
row = str(peaksheet.row(curr_row))
words = row.strip().split('\t')
for i in range(len(words)):
dict_data[curr_row][i] = words[i]
c = words[0]
s = int(words[1])
答案 2 :(得分:0)
如果前10行是您不想要的,那么您可以随时在10开始curr_row
。至于您的词典,请尝试以下操作:
headers=[(names of the columns to use as keys for your dict)]
dict_list=[]
col_list=[None]*len(headers)
for curr_row in range(10, peaksheets.nrows):
for curr_cell in range(peaksheets.ncols):
cell_value = str(peaksheets.cell(curr_row, curr_cell).value)
col_list[curr_row].append(cell_value)
for head_name in headers:
dict_list[head_name]=col_list[headers.index(head_name)]
要记住的一些事项:
headers
列表while
循环的替代。