让我们有一个带有行和列标题的CSV表,例如:
, "Car", "Bike", "Boat", "Plane", "Shuttle"
"Red", 1, 7, 3, 0, 0
"Green", 5, 0, 0, 0, 0
"Blue", 1, 1, 4, 0, 1
Run Code Online (Sandbox Code Playgroud)
我想获得行和列标题,即:
col_headers = ["Car", "Bike", "Boat", "Plane", "Shuttle"]
row_headers = ["Red", "Green", "Blue"]
data = [[1, 7, 3, 0, 0],
[5, 0, 0, 0, 0],
[1, 1, 4, 0, 1]]
Run Code Online (Sandbox Code Playgroud)
当然我可以做点什么
import csv
with open("path/to/file.csv", "r") as f:
csvraw = list(csv.reader(f))
col_headers = csvraw[1][1:]
row_headers = [row[0] for row in csvraw[1:]]
data = [row[1:] for row in csvraw[1:]]
Run Code Online (Sandbox Code Playgroud)
......但它看起来不够Pythonic.
这种自然操作有更简洁的方法吗?
看一眼csv.DictReader。
如果省略 fieldnames 参数,则 csv 文件第一行中的值将用作字段名。
那么你就可以这样做了reader.fieldnames。当然,这仅提供列标题。您仍然需要手动解析行标题。
不过,我认为您原来的解决方案非常好。