Python 如何将xlsx转换为制表符分隔的文件

Python 如何将xlsx转换为制表符分隔的文件,python,excel,macos,csv,tab-delimited,Python,Excel,Macos,Csv,Tab Delimited,我有相当多的xlsx文件,将它们逐个转换为制表符分隔的文件是一件痛苦的事情 我想知道是否有任何解决方案可以通过python实现这一点。这里是我的发现,以及我如何应对失败 我发现了这个问题,并尝试了解决方案,但没有成功 我还试着对一个文件进行测试,看看它是如何工作的,但没有成功 #!/usr/bin/python import xlrd import csv def main(): # I open the xlsx file myfile = xlrd.open_workb

我有相当多的xlsx文件,将它们逐个转换为制表符分隔的文件是一件痛苦的事情

我想知道是否有任何解决方案可以通过python实现这一点。这里是我的发现,以及我如何应对失败 我发现了这个问题,并尝试了解决方案,但没有成功

我还试着对一个文件进行测试,看看它是如何工作的,但没有成功

#!/usr/bin/python
import xlrd
import csv


def main():
    # I open the xlsx file 
    myfile = xlrd.open_workbook('myfile.xlsx')
    # I don't know the name of sheet
    mysheet = myfile.sheet_by_index(0)
    # I open the output csv
    myCsvfile = open('my.csv', 'wb')
    # I write the file into it
    wr = csv.writer(myCsvfile, delimiter="\t")
    for rownum in xrange(mysheet.nrows):
        wr.writerow(mysheet.row_values(rownum))
    myCsvfile.close()
if __name__ == '__main__':
   main()

没有真正需要的主要功能

我不确定你的缩进问题,但我会这样写你的。(根据上面的第一条评论,这应该是可行的)


当你可以用三行文字来表达时,为什么还要这么痛苦

import pandas as pd

file = pd.read_excel('myfile.xlsx')

file.to_csv('myfile.xlsx',
             sep="\t",
             index=False)

除了所有错误的变量名之外,您的程序工作正常。你到底有什么问题?有什么错误?@Jean-François Fabre您能在我的问题中修改我的变量名吗?我正在使用Mac和python2。7@Jean-François Fabre没有错误,它只是没有创建任何文件您是否记得运行
main()
?quickfix:
def main():#我打开xlsx文件myfile=xlrd.open_工作簿('Classeur1.xlsx')#我不知道工作表mysheet=myfile.sheet的名称(0)#我打开输出csv myCsvfile=open('my.csv',wb')#我将文件wr=csv.writer(myCsvfile,delimiter=“\t”)写入xrange中的rownum(mysheet.nrows):wr.writerow(mysheet.row_值(rownum))myCsvfile.close()
我收到这个错误
writerow(mysheet.row_值(rownum))UnicodeEncodeError:“ascii”编解码器无法对131-132位置的字符进行编码:序号不在范围(128)内
你知道为什么吗?我喜欢并接受了你的答案,但如果可能的话,如果你能修改它,给我.txt而不是.csv,我将不胜感激<代码>打开('my.txt',wb')?文件扩展名与问题高度无关噢,天哪,我解决了它,看看这个,我只在打开文件时添加了rU
open('data.txt','rU')
它就像一个符咒一样工作:-D:-D:-D在这里我找到了一些信息,说明该模式已被弃用,所以我确信它现在可以工作。
import pandas as pd

file = pd.read_excel('myfile.xlsx')

file.to_csv('myfile.xlsx',
             sep="\t",
             index=False)