我正在尝试遍历目录中的多个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')
我的代码仍然有点乱,我可能会从我的各种尝试中获得剩余的代码!
由于 MikG
答案 0 :(得分:0)
我认为你在while循环中的这一行有一个错误:
workbookr = xlrd.open_workbook(fname[n])
必须是:
workbookr = xlrd.open_workbook(fname)
否则你的工作簿会在你在循环之外设置之前保持不变:
fname = files[n]
workbookr = xlrd.open_workbook(fname)
这是列表中的第一个文件。
答案 1 :(得分: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,那么作为常规文件处理起来会更容易,并通过解析来找到正确的信息,再加上无需导入。快乐的编码!
答案 2 :(得分: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