尝试迭代目录中的CSV文件并获取特定单元格,然后将结果发布到单个cs

2024-05-15 17:58:22 发布

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

我尝试在一个目录中遍历几个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')

我的代码仍然有点凌乱,我可能有我的各种尝试的剩余代码!在

谢谢 米克


Tags: 文件csv代码importfilesfnamerowqta
3条回答

我认为while循环中的这一行出错:

workbookr = xlrd.open_workbook(fname[n])

必须是:

^{pr2}$

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

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

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

假设您只是尝试从每个文件创建一个相同单元格的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文件,那么作为一个普通文件来处理和解析以找到正确的信息,再加上没有什么可以导入的。编码快乐!在

因为它们只是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

相关问题 更多 >