使用 python xlrd 将 xlsx 文件的单列写入 csv
Write a single column of an xlsx file to csv using python xlrd
我已经完成了 99%...
def xl_to_csv(xl_file):
wb = xlrd.open_workbook(xl_file)
sh = wb.sheet_by_index(0)
output = 'output.csv'
op = open(output, 'wb')
wr = csv.writer(op, quoting=csv.QUOTE_ALL)
for rownum in range(sh.nrows):
part_number = sh.cell(rownum,1)
#wr.writerow(sh.row_values(rownum)) #writes entire row
wr.writerow(part_number)
op.close()
使用 wr.writerow(sh.row_values(rownum))
我可以将 Excel 文件中的整行写入 CSV,但是大约有 150 列,我只想要其中一列。因此,我正在使用 part_number = sh.cell(rownum,1)
获取我想要的一列,但我似乎无法获得正确的语法来将此变量写入 CSV 文件。
这是回溯:
Traceback (most recent call last):
File "test.py", line 61, in <module>
xl_to_csv(latest_file)
File "test.py", line 32, in xl_to_csv
wr.writerow(part_number)
_csv.Error: sequence expected
试试这个:
wr.writerow([part_number.value])
参数必须是类列表对象。
最快的解决方法是将 partnum
放入 list
中(根据 Abdou,您需要添加 .value
才能从单元格中获取值):
for rownum in range(sh.nrows):
part_number = sh.cell(rownum,1).value # added '.value' to get value from cell
wr.writerow([part_number]) # added brackets to give writerow the list it wants
更一般地说,您可以使用列表理解来获取您想要的列:
cols = [1, 8, 110]
for rownum in range(sh.nrows):
wr.writerow([sh.cell(rownum, colnum).value for colnum in cols])
我已经完成了 99%...
def xl_to_csv(xl_file):
wb = xlrd.open_workbook(xl_file)
sh = wb.sheet_by_index(0)
output = 'output.csv'
op = open(output, 'wb')
wr = csv.writer(op, quoting=csv.QUOTE_ALL)
for rownum in range(sh.nrows):
part_number = sh.cell(rownum,1)
#wr.writerow(sh.row_values(rownum)) #writes entire row
wr.writerow(part_number)
op.close()
使用 wr.writerow(sh.row_values(rownum))
我可以将 Excel 文件中的整行写入 CSV,但是大约有 150 列,我只想要其中一列。因此,我正在使用 part_number = sh.cell(rownum,1)
获取我想要的一列,但我似乎无法获得正确的语法来将此变量写入 CSV 文件。
这是回溯:
Traceback (most recent call last):
File "test.py", line 61, in <module>
xl_to_csv(latest_file)
File "test.py", line 32, in xl_to_csv
wr.writerow(part_number)
_csv.Error: sequence expected
试试这个:
wr.writerow([part_number.value])
参数必须是类列表对象。
最快的解决方法是将 partnum
放入 list
中(根据 Abdou,您需要添加 .value
才能从单元格中获取值):
for rownum in range(sh.nrows):
part_number = sh.cell(rownum,1).value # added '.value' to get value from cell
wr.writerow([part_number]) # added brackets to give writerow the list it wants
更一般地说,您可以使用列表理解来获取您想要的列:
cols = [1, 8, 110]
for rownum in range(sh.nrows):
wr.writerow([sh.cell(rownum, colnum).value for colnum in cols])