【问题标题】:How do I make csv.reader() index by field/string instead of by character?如何按字段/字符串而不是按字符创建 csv.reader() 索引?
【发布时间】:2020-06-30 20:15:48
【问题描述】:

我正在尝试使用 csv.reader() 从数据库中提取值以供以后比较。我想让读者索引该行,以便列表中的每个元素对应一个逗号分隔值,而不是该行中的字符。

我的代码:

with open(sys.argv[1]) as str_db:
    str_reader = csv.reader(str_db)
    line_count = 0
    fields = []
    for row in str_db:
        if line_count == 0:
            fields = re.split(",", row)
            line_count += 1
        else:
            print(f"{fields[0]}: {row[0]}, {fields[1]}: {row[1]}, {fields[2]}: {row[2]}, {fields[3]}: {row[3]}")

从文件中拉取 = argv[1]:

name,AGATC,AATG,TATC
Alice,2,8,3
Bob,4,1,5
Charlie,3,2,5

我希望看到的地方:

name: Alice, AGATC: 2, AATG: 8, TATC: 3
name: Bob, AGATC: 4, AATG: 1, TATC: 5
name: Charlie, AGATC: 3, AATG: 2, TATC: 5

这是我的输出:

name: A, AGATC: l, AATG: i, TATC
: c
name: B, AGATC: o, AATG: b, TATC
: ,
name: C, AGATC: h, AATG: a, TATC
: r

如果你能告诉我为什么新行在 TATC 结束时开始,则非常感谢。

我试过了:

with open(sys.argv[1]) as str_db:
    str_reader = csv.reader(str_db, delimiter = ',')
    line_count = 0
    fields = []
    for row in str_db:
        if line_count == 0:
            fields = re.split(",", row)
            line_count += 1
        else:
            print(f"{fields[0]}: {row[0]}, {fields[1]}: {row[1]}, {fields[2]}: {row[2]}, {fields[3]}: {row[3]}")

但没有变化。

【问题讨论】:

  • 你没有使用阅读器!您仍在直接迭代文件对象。

标签: python csv csvreader


【解决方案1】:

实际上使用阅读器会产生正确的结果。注意newline='' 推荐用于打开带有csv.readercsv.writer 的文件:

import csv

with open('input.csv',newline='') as str_db:
    reader = csv.reader(str_db)
    fields = next(reader)
    for row in reader:
        print(f"{fields[0]}: {row[0]}, {fields[1]}: {row[1]}, {fields[2]}: {row[2]}, {fields[3]}: {row[3]}")

输出:

name: Alice, AGATC: 2, AATG: 8, TATC: 3
name: Bob, AGATC: 4, AATG: 1, TATC: 5
name: Charlie, AGATC: 3, AATG: 2, TATC: 5

DictReader可以帮上忙:

import csv

with open('input.csv') as str_db:
    reader = csv.DictReader(str_db)
    for row in reader:
        print(', '.join([f'{key}: {value}' for key,value in row.items()]))

(相同的输出)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-06-29
    • 2014-12-02
    • 2014-07-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多