如何使用python将XLS转换为CSV文件?

如何使用python将XLS转换为CSV文件?,python,excel,csv,xls,qgis,Python,Excel,Csv,Xls,Qgis,我正在使用QGIS 2.8.1的python控制台。我想使用python将许多xls文件转换为csv格式。我的输入目录是:D:\PATRICIA\TESTE\XLS,输出目录是:D:\PATRICIA\TESTE\CSV2。我根据你的建议()编写了这段代码,并在不同日期的不同文件中开发了它,1999/01/2直到1999/01/31如下:RR_1999_1_2.xls,RR_1999_1_3.xlsRR_1999_1_31.xls 我不知道为什么我的脚本不起作用。这意味着什么也没发生 我的脚本是

我正在使用
QGIS 2.8.1
的python控制台。我想使用python将许多
xls
文件转换为
csv
格式。我的输入目录是:
D:\PATRICIA\TESTE\XLS
,输出目录是:
D:\PATRICIA\TESTE\CSV2
。我根据你的建议()编写了这段代码,并在不同日期的不同文件中开发了它,
1999/01/2
直到
1999/01/31
如下:
RR_1999_1_2.xls
RR_1999_1_3.xls
<代码>RR_1999_1_31.xls

我不知道为什么我的脚本不起作用。这意味着什么也没发生

我的脚本是

import xlrd
import csv
import datetime as dt
from datetime import timedelta

#initial and final dates 
data1='19990102'
data2='19990131'

anoi = int(data1[:4])
mesi = int(data1[4:6])
diai = int(data1[6:8])
anof = int(data2[:4])
mesf = int(data2[4:6])
diaf = int(data2[6:8])

start_date = dt.datetime(anoi, mesi, diai)
end_date = dt.datetime(anof, mesf, diaf)

total_days = (end_date - start_date).days + 1


for day in xrange(0, total_days):
        current_date = (start_date + dt.timedelta(days = day)).date()
        file_date = str(current_date.year)+'_'+str(current_date.month)+'_'+str(current_date.day)

        srt1='D:/PATRICIA/TESTE/XLS/RR_'+file_date+'.xls'
        srt2='D:/PATRICIA/TESTE/CSV2/RR_'+file_date+'.csv'

        def xls_to_csv():

            x =  xlrd.open_workbook(str1)
            x1 = x.sheet_by_name('Sheet1')
            csvfile = open(str2, 'wb')
            writecsv = csv.writer(csvfile, quoting=csv.QUOTE_ALL)

            for rownum in xrange(sh.nrows):
                writecsv.writerow(x1.row_values(rownum))

            csvfile.close()
有什么帮助吗


谢谢。

除非我错过了一件重要的事情,否则您可以在循环中声明函数
xls\u to\u csv
,但绝不调用它。脚本的一般结构应为:

#initializations
data1='19990102'
...
total_days = (end_date - start_date).days + 1

# function definition:
def xls_to_csv(str1, str2):
    x =  xlrd.open_workbook(str1)
    x1 = x.sheet_by_name('Sheet1')
    csvfile = open(str2, 'wb')
    writecsv = csv.writer(csvfile, quoting=csv.QUOTE_ALL)

    for rownum in xrange(sh.nrows):
        writecsv.writerow(x1.row_values(rownum))

    csvfile.close()

# loop
for day in xrange(0, total_days):
        current_date = (start_date + dt.timedelta(days = day)).date()
        file_date = str(current_date.year)+'_'+str(current_date.month)+'_'+str(current_date.day)

        srt1='D:/PATRICIA/TESTE/XLS/RR_'+file_date+'.xls'
        srt2='D:/PATRICIA/TESTE/CSV2/RR_'+file_date+'.csv'
        xls_to_csv(srt1, srt2)  # function call

除非我错过了一件重要的事情,否则在循环中声明函数
xls\u to\u csv
,但从不调用它。脚本的一般结构应为:

#initializations
data1='19990102'
...
total_days = (end_date - start_date).days + 1

# function definition:
def xls_to_csv(str1, str2):
    x =  xlrd.open_workbook(str1)
    x1 = x.sheet_by_name('Sheet1')
    csvfile = open(str2, 'wb')
    writecsv = csv.writer(csvfile, quoting=csv.QUOTE_ALL)

    for rownum in xrange(sh.nrows):
        writecsv.writerow(x1.row_values(rownum))

    csvfile.close()

# loop
for day in xrange(0, total_days):
        current_date = (start_date + dt.timedelta(days = day)).date()
        file_date = str(current_date.year)+'_'+str(current_date.month)+'_'+str(current_date.day)

        srt1='D:/PATRICIA/TESTE/XLS/RR_'+file_date+'.xls'
        srt2='D:/PATRICIA/TESTE/CSV2/RR_'+file_date+'.csv'
        xls_to_csv(srt1, srt2)  # function call

感谢Serge Ballesta,但出现了以下错误:回溯(最近一次调用):文件“”,第1行,文件“D:/PATRICIA/IG/PYTHON_SCRIPTS/ConvertXlsToCsv.py”,第30行,xls_to_csv(srt1,srt2)#函数调用文件“D:/PATRICIA/IG/PYTHON_SCRIPTS/ConvertXlsToCsv.py”,第18行,xls_to_csv,用于xrange(sh.nrows)中的rownum:name错误:全局名称“sh”未定义Hanks Serge Ballesta,但出现此错误:回溯(最近一次调用):文件“”,第1行,在文件“D:/PATRICIA/IG/PYTHON_SCRIPTS/ConvertXlsToCsv.py”中,第30行,在xls_to_csv(srt1,srt2)中,函数调用文件“D:/PATRICIA/IG/PYTHON_SCRIPTS/xlconvertstocsv.py”,第18行,在xrange(sh.nrows)中rownum的xls_到_csv中:名称错误:未定义全局名称“sh”