正在尝试读取xlrd、提取数据和写入cs

2024-05-14 05:47:29 发布

您现在位置:Python中文网/ 问答频道 /正文

我试着读一个excel文件,提取一些数据,然后把它写成csv。这对我来说很新鲜,我在某个地方搞砸了:我总是得到一个空的csv。我肯定我错过了一些非常基本的东西,但是如果我能看到的话,那就太糟糕了。代码如下: ``` 导入xlrd 导入操作系统 导入csv 从zipfile导入zipfile 导入日期时间

datafile = "./2013_ERCOT_Hourly_Load_Data.xls"
outfile = "./2013_Max_Loads.csv"


def parse_file(datafile):

   workbook = xlrd.open_workbook(datafile)
   sheet = workbook.sheet_by_index(0)
   data = None
   outputlist = []

   for col in range(1, sheet.ncols):

        cv = sheet.col_values(col, start_rowx=1, end_rowx=None)

        header = sheet.cell_value(0,col)

        maxval = max(cv)

        maxpos = cv.index(maxval) + 1

        maxtime = sheet.cell_value(maxpos, 0)

        realtime = xlrd.xldate_as_tuple(maxtime, 0)

        year = realtime[0]

        month = realtime[1]

        day = realtime[2]

        hour = realtime[3]

        data = [
            'Region:', header,
            'Year:', year,
            'Month:', month,
            'Day:', day,
            'Hour:', hour,
             maxpos,
             maxtime,
            realtime,
            maxval,
            ]

    path = "./2013_Max_Loads.csv"
    return outputlist



def save_file(data, filename):

    with open(filename, "wb") as f:
        writer = csv.writer(f, delimiter='|')
        for line in data:
            writer.writerow(line)

parse_file(datafile)

save_file(parse_file(datafile),"2013_Max_Loads.csv")

Tags: csvdataparsecolcvmaxrealtimefile
1条回答
网友
1楼 · 发布于 2024-05-14 05:47:29

您声明了outfile,但没有使用它

您没有传递要保存文件的目录(路径)。在

我也认为打两次电话parse_file可能会把你搞砸。只需传递文件名并从save_file函数中调用它。在

我还发现您返回output list作为空白列表。在

所以在这里,试试这个。我将假定您的xlrd命令是正确的,因为我没有亲自使用过该模块。在

import csv

import xlrd


def parse_file(datafile):

   workbook = xlrd.open_workbook(datafile)
   sheet = workbook.sheet_by_index(0)
   outputlist = []
   outputlist_append = outputlist.append

   for col in range(1, sheet.ncols):
        cv = sheet.col_values(col, start_rowx=1, end_rowx=None)
        header = sheet.cell_value(0,col)
        maxval = max(cv)
        maxpos = cv.index(maxval) + 1
        maxtime = sheet.cell_value(maxpos, 0)
        realtime = xlrd.xldate_as_tuple(maxtime, 0)
        year = realtime[0]
        month = realtime[1]
        day = realtime[2]
        hour = realtime[3]

        data = [
            'Region:', header,
            'Year:', year,
            'Month:', month,
            'Day:', day,
            'Hour:', hour,
             maxpos,
             maxtime,
            realtime,
            maxval,
            ]
        outputlist_append(data)

    return outputlist


def save_file(data, filename):

    parse_file(data)
    with open(filename, 'wb') as f:
        writer = csv.writer(f, delimiter='|')
        for line in data:
            writer.writerow(line)
    return


datafile = "./2013_ERCOT_Hourly_Load_Data.xls"
outfile = "./2013_Max_Loads.csv"

save_file(datafile, outfile)

UPDATE: Edit in code in function save_file() to implement @wwii's suggestion.

尝试替换下面新的save_file()

^{pr2}$

另外,将变量(您使用的是writer)更改为类似于wr的内容。您真的希望避免与使用与所调用的方法、函数或类同名的变量发生任何可能的冲突。在

相关问题 更多 >