如何读取CSV文件的第一行

wz8daaqr  于 2023-03-05  发布在  其他
关注(0)|答案(2)|浏览(377)

我正在尝试写一个简单的python代码,用于接收csv文件,并使用tabulate模块在终端中打印出格式良好的内容。以下是我的代码片段:

table = []
try:
    with open(filename) as csvfile:
        reader = csv.DictReader(csvfile)
        i = 0
        for row in reader:
            if (i == 0):
                headers = row
                i = 1
            table.append(row)
except FileNotFoundError:
    print("File not found.")
    sys.exit()
#output
print(tabulate(table, headers, tablefmt='grid'))

当我运行代码时,它打印出表格,但是使用csv文件中的第二行而不是第一行作为标题,这使得输出的前两行重复。
基本上,如何将.csv文件的第一行存储为表头?
基于提供的帮助,我已经修改了我的代码,修改如下。现在,它可以工作了。谢谢。

table = []
try:
    with open(filename, newline='') as csvfile:
        reader = csv.DictReader(csvfile)
        headers = reader.fieldnames
        for row in reader:
            table.append(list(row.values()))
except FileNotFoundError:
    print("File not found.")
    sys.exit()

#output
print(tabulate(table, headers, tablefmt='grid'))
vi4fp9gy

vi4fp9gy1#

请参阅csv.DictReader文档,特别是第二段。如果不使用fieldnames参数(实际上没有),则生成的dict键(字段名)是CSV文件第一行的值。您可以使用reader.fieldnames在代码中访问字段名。
您的代码应类似于以下内容:

table = []
try:
    with open(filename) as csvfile:
        reader = csv.DictReader(csvfile)
        headers = reader.fieldnames
        for row in reader:
            table.append(row)
except FileNotFoundError:
    print("File not found.")
    sys.exit()
#output
print(tabulate(table, headers, tablefmt='grid'))
h4cxqtbf

h4cxqtbf2#

我唯一能想到的是你的程序不知何故假设第一行是头,通常.csv文件的第一行是头,所以我可能会去掉if(i == 0)和它的内容,直接附加该行。

相关问题