首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Python:一般CSV文件解析和操作

Python:一般CSV文件解析和操作
EN

Stack Overflow用户
提问于 2012-07-19 22:49:13
回答 3查看 1.7K关注 0票数 3

Python脚本的目的是比较多个CSV文件中的数据,寻找差异。数据是有序的,但文件之间的排序不同。这些文件包含大约70K的线条,重约15 The。这里没什么花哨的或铁杆的。下面是代码的一部分:

代码语言:javascript
运行
复制
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文件?我正在使用csv.reader,但是我会从使用csv.DictReader中获益吗?
  • 如何创建包含在精确列中具有特定值的整行的列表?
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2012-07-19 23:29:28

你确定你想把所有的行都留着吗?这将创建一个仅具有匹配值的列表..。fname也可以来自glob.glob()os.listdir()或您选择的任何其他数据源。请注意,你提到了第20栏,但row20将是第21栏.

代码语言:javascript
运行
复制
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

票数 2
EN

Stack Overflow用户

发布于 2012-07-19 23:17:52

这应该是可行的,您不需要创建另一个列表就可以访问这些列。

代码语言:javascript
运行
复制
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']
票数 2
EN

Stack Overflow用户

发布于 2012-07-19 23:08:49

如果我正确理解了这个问题,如果value在行中,您希望包含一行,但是您不知道value是哪一列,对吗?

如果您的行是列表,那么应该可以这样做:

代码语言:javascript
运行
复制
testlist = [row for row in allRows if 'value' in row]

编辑后:

如果像您所说的那样,需要一个value位于指定列中的行列表(由整数pos指定),那么:

代码语言:javascript
运行
复制
testlist = []
pos = 20
for row in allRows:
    testlist.append([element if index != pos else 'value' for index, element in enumerate(row)])

(我还没有测试过这个,但现在就让我看看它是否有效)。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11570455

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档