繁体   English   中英

使用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,但是wr.writerow(sh.row_values(rownum))有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]) 

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM