如何在不使用库的情况下将csv数据从文件读入内存Python

hk8txs48  于 2023-01-15  发布在  Python
关注(0)|答案(1)|浏览(131)

所以我有一个练习任务要解决。这个任务是开发一个从文件中读取csv数据到内存中的函数,但是我们不能使用任何库来完成这个任务。所以我不能使用csv阅读器,Pandas,NumPy等。
这是我的想法,但是它并不像它说的那样工作,“csv_list没有定义”。我有点不知道从这里去哪里,并且主要是使用库编码的,因此,手动编码和自己开发函数是一场斗争!我在这里寻找过任何解决方案,但似乎都不起作用/他们使用的库,我不能使用。如果有人有办法做到这一点,我将不胜感激!

#define read csv
def read_csv (file_name):
    with open(file_name) as f:
        csv_list = [[val.strip() for val in r.split (",")] for r in f.readlines()]
#convert file to dictionary structure 
(_, *header), *data = csv_list
csv_dict = {}
for row in data:
    key, *values = row
    csv_dict[key] = {key: value for key, value in zip(header, values)}
#insert name of file to be read by user 
read_csv (task1.csv)
rm5edbpk

rm5edbpk1#

为什么会出现这个错误,答案是csv_list是方法read_csv(file_name)的局部变量。也许您不想设置该变量,而只想返回解析的结果。然后,您可以在调用该方法时获得所需的值。注意,您需要比当前更快地调用该方法。
这将给予你一个字典,但我不确定它是以你可能想要的方式结构的,我希望在阅读CSV后得到一个字典列表,不是你正在产生的,但这是你的决定。

#define read csv
def read_csv (file_name):
    with open(file_name) as f:
        return [[val.strip() for val in r.split (",")] for r in f.readlines()]

(_, *header), *data = read_csv("small.csv")

#convert file to dictionary structure 
csv_dict = {}
for row in data:
    key, *values = row
    csv_dict[key] = {key: value for key, value in zip(header, values)}

print(csv_dict)

如果是我的话,我可能会做以下调整来得到一个基于列表的结果,同时我也会去掉像*header这样的东西:

def read_csv(file_name):
    with open(file_name) as f:
        yield from [[c.strip() for c in r.split(",")] for r in f]

rows = read_csv("small.csv")
header_row = next(rows)
csv_dict = [dict(zip(header_row, row)) for row in rows]

print(csv_dict)

相关问题