0

我正在尝试遍历目录中的多个 CSV 文件,并从每个 CSV 文件(在 Excel 中打开时找到的单元格位置)中获取一个特定的单元格(相同的单元格位置),然后将所有类似的单元格发布到单个 CSV 或 xls 文件中,一个在另一个之后。

我已经编写了下面的代码(在一些研究帮助下),但我只是迭代列表中的第一个 csv 文件并每次打印相同的值,具体取决于列表中 CSV 文件的数量。有人能指出我正确的方向吗?

这是我糟糕的尝试!

import xlwt
import xlrd
import csv
import glob
import os


files = ['1_IQ_QTA.csv','2_IQ_QTA.csv','3_IQ_QTA.csv','4_IQ_QTA.csv']
n = 0
row = 0
filename = ('outputList.csv', 'a')
fname = files[n]
workbookr = xlrd.open_workbook(fname)
sheetr = workbookr.sheet_by_index(0)
workbookw = xlwt.Workbook()
sheetw = workbookw.add_sheet('test')

while n<len(files):
    fname = files[n]
    workbookr = xlrd.open_workbook(fname[n])
    data = [sheetr.cell_value(12, 1) for col in range(sheetr.ncols)]

    for index, value in enumerate(data):
        sheetw.write(row, index, value)
        workbookw.save('outputList.csv')
    row = row +1
    n = n+1    

workbookw.save('outputList.csv')

我的代码还是有点乱,我的各种尝试可能有剩余的代码!

谢谢米克

4

3 回答 3

0

我认为您在 while 循环中的这一行有错误:

workbookr = xlrd.open_workbook(fname[n])

一定是:

workbookr = xlrd.open_workbook(fname)

否则,您的工作簿将保持您在循环外之前设置的状态:

fname = files[n]
workbookr = xlrd.open_workbook(fname)    

这是您列表中的第一个文件。

于 2013-10-10T11:23:49.193 回答
0

假设您只是尝试从每个文件中制作相同单元格的 CSV 文件。因此,如果您有 4 个文件,您的输出文件将有 4 个条目。

files = ['1_IQ_QTA.csv','2_IQ_QTA.csv','3_IQ_QTA.csv','4_IQ_QTA.csv']
n = 0
row = 0
outputfile = open('outputList.csv', 'w')
cellrow = 12 #collect the cell (12, 1) from each file and put it in the output list
cellcolumn = 1
while n<len(files):
    fname = files[n]
    currentfile = open(fname,'r')
    for i in range (cellrow):
        currentrow = currentfile.readline()
#        print currentrow #for testing
    columncnt=0
    currentcell = ''
    openquote = False
    for char in currentrow:
        if char == '"' and not openquote:
            openquote = True
        elif char == '"' and openquote:
            openquote = False
        elif char == ',' and not openquote:
            columncnt+=1
            if columncnt == cellcolumn:
                cellvalue = currentcell
#                print cellvalue #for testing
            currentcell=''
        else:
            currentcell += char

    outputfile.write (cellvalue + ',')
    currentfile.close()
    n += 1

outputfile.close()

在我看来,既然您已经有了 CSV,那么将其作为常规文件处理并解析以找到正确的信息会更容易,而且无需导入任何内容。快乐编码!

于 2013-10-10T11:25:01.243 回答
0

由于它们只是 csv 文件,因此不需要 excel 库。

#!/usr/bin/env python
import argparse, csv
if __name__ == '__main__':

    parser = argparse.ArgumentParser(description='merge csv files on field', version='%(prog)s 1.0')
    parser.add_argument('infile', nargs='+', type=str, help='list of input files')
    parser.add_argument('--col', type=int, default=0, help='Column to grab')
    parser.add_argument('--row', type=int, default=0, help='Row to grab')
    parser.add_argument('--out', type=str, default='temp.csv', help='name of output file')
    args = parser.parse_args()
    data = []

    for fname in args.infile:
        with open(fname, 'rb') as df:
            reader = csv.reader(df)
            for index, line in enumerate(reader):
                if index == args.row:
                    data.push(line[args.column])
            del reader

    writer = csv.writer(open(args.out, "wb"), dialect='excel')
    writer.writerows(data)
    del writer
于 2013-10-10T12:16:43.123 回答