Python脚本的目的是比较多个CSV文件中的数据,寻找差异。数据是有序的,但文件之间的排序不同。这些文件包含大约70K的线条,重约15 The。这里没什么花哨的或铁杆的。下面是代码的一部分:
def getCSV(fpath):
with open(fpath,"rb") as f:
csvfile = csv.reader(f)
for row in csvfile:
allRows.append(row)
allCols = map(list, zip(*allRows))csv.reader,但是我会从使用csv.DictReader中获益吗?发布于 2012-07-19 23:29:28
你确定你想把所有的行都留着吗?这将创建一个仅具有匹配值的列表..。fname也可以来自glob.glob()或os.listdir()或您选择的任何其他数据源。请注意,你提到了第20栏,但row20将是第21栏.
import csv
matching20 = []
for fname in ('file1.csv', 'file2.csv', 'file3.csv'):
with open(fname) as fin:
csvin = csv.reader(fin)
next(csvin) # <--- if you want to skip header row
for row in csvin:
if row[20] == 'value':
matching20.append(row) # or do something with it here只有在有标题行并希望按名称访问列时,才需要csv.DictReader。
发布于 2012-07-19 23:17:52
这应该是可行的,您不需要创建另一个列表就可以访问这些列。
import csv
import sys
def getCSV(fpath):
with open(fpath) as ifile:
csvfile = csv.reader(ifile)
rows = list(csvfile)
value_20 = [x for x in rows if x[20] == 'value']发布于 2012-07-19 23:08:49
如果我正确理解了这个问题,如果value在行中,您希望包含一行,但是您不知道value是哪一列,对吗?
如果您的行是列表,那么应该可以这样做:
testlist = [row for row in allRows if 'value' in row]编辑后:
如果像您所说的那样,需要一个value位于指定列中的行列表(由整数pos指定),那么:
testlist = []
pos = 20
for row in allRows:
testlist.append([element if index != pos else 'value' for index, element in enumerate(row)])(我还没有测试过这个,但现在就让我看看它是否有效)。
https://stackoverflow.com/questions/11570455
复制相似问题