我正在尝试更新一些代码。目前正在学习 Python3,想知道这是否可以用字典或元组做得更好? 代码查看 csv 文件并打印出值。我正在尝试更新代码以使其更简单、更健壮(如果可能(。
将示例数据用作:
品牌,型号,年份,颜色,engine_size,top_speed,变速箱
宝马,X6,2018,黑色,4L,240,手动
# use a sample piece of data as:
# brand,model,year,colour,engine_size,top_speed,transmission
# bmw,X6,2018,black,4L,240,manual
import csv
brand, model, year, colour, engine_size, top_speed, transmission = {},
{}, {}, {}, {}, {}, {}
counter = 0
with open("csv_test.csv", 'r') as csvFile:
reader = csv.DictReader(csvFile)
for row in reader:
brand[counter] = row['brand']
model[counter] = row['model']
year[counter] = row['year']
colour[counter] = row['colour']
engine_size[counter] = row['engine_size']
top_speed[counter] = row['top_speed']
transmission[counter] = row['transmission']
counter += 1
csvFile.close()
我知道DictReader将使用第一行作为列名,我想遍历每一行并将值打印到屏幕上。
每列不需要一个字典:你只需要解析中的row
list / dict
(每一行都是一个字典(。此代码将行存储在字典中,并将"行号"作为键(它从不将此数字用于任何内容 - 因此您可能只是使用列表(。
创建演示数据:
# use a sample piece of data as:
with open("csv_test.csv","w") as f:
f.write("""brand,model,year,colour,engine_size,top_speed,transmission
bmw,X6,2018,black,4L,240,manual
bmw,X7,2019,green,4L,240,manual
bmw,X8,2020,yellow,4L,240,manual
""")
加载/打印数据:
import csv
data = {}
with open("csv_test.csv", 'r') as csvFile:
reader = csv.DictReader(csvFile)
for num,row in enumerate(reader): # num gives you the row number if you really need it
data[num] = row # put the line of your file into dict, row number is key
print(data)
# print data "nicely"
for d in data:
# get the maximum lenght for your keys to allow a nice formatting
max_key = max(len(i) for k in data for i in data[k])
for k in data[d]:
# format the key to max length so data is aligned
print(f"{k:{max_key}}t{data[d][k]}")
print()
输出:
# your parsed dict of row-dicts
{0: OrderedDict([('brand', 'bmw'), ('model', 'X6'), ('year', '2018'), ('colour', 'black'),
('engine_size', '4L'), ('top_speed', '240'), ('transmission', 'manual')]),
1: OrderedDict([('brand', 'bmw'), ('model', 'X7'), ('year', '2019'), ('colour', 'green'),
('engine_size', '4L'), ('top_speed', '240'), ('transmission', 'manual')]),
2: OrderedDict([('brand', 'bmw'), ('model', 'X8'), ('year', '2020'), ('colour', 'yellow'),
('engine_size', '4L'), ('top_speed', '240'), ('transmission', 'manual')])}
# the formatted output
brand bmw
model X6
year 2018
colour black
engine_size 4L
top_speed 240
transmission manual
brand bmw
model X7
year 2019
colour green
engine_size 4L
top_speed 240
transmission manual
brand bmw
model X8
year 2020
colour yellow
engine_size 4L
top_speed 240
transmission manual
如果只想将数据放在行中,请使用:
# print data in lines
for d in data:
print(*data[d].values(), sep="t")
输出:
bmw X6 2018 black 4L 240 manual
bmw X7 2019 green 4L 240 manual
bmw X8 2020 yellow 4L 240 manual
相关:
- 如何从字典中获取值列表?