Python:如何将CSV文件转换为字典列表,而无需导入阅读器或外部库



我需要将CSV文件转换为字典列表,而无需为我正在为类做的项目导入CSV或其他外部库。
我能够使用标题行获得密钥,但当我试图提取值时,它逐行而不是逐列,并在错误的地方开始。然而,当我把它添加到列表中时,它又回到了正确的位置。但是,我不确定如何将键连接到列表中的正确列。
CSV文件这是我正在使用的CSV文件,我只使用到第一个逗号的描述部分。
我试着使用一个for 6循环,以循环通过每个键,但它似乎去逐行,我不知道如何改变它。
如果有人能指引我正确的方向,我将不胜感激。

CSV样本-样本没有正确保存,但它在顶部有三个标题,然后在下面有三个匹配的信息等等。
n(代码、名称、状态)(阿卡迪亚国家公园,缅因州)n(ARCH,Arches National Park,UT(BADL, Badlands National Park,SD)n

阅读你的问题。我是从我从你的问题中理解的代码。您应该学会发布有问题的代码。这是一项强制性技能。总是使用"with"块。我制作了一个带有两行记录的演示CSV文件。以下代码以字典列表的形式获取所有行。

def readParksFile(fileName="national_parks.csv"):
with open(fileName) as infile:
column_names = infile.readline()
keys = column_names.split(",")
number_of_columns = len(keys)
list_of_dictionaries = []
data = infile.readlines()
list_of_rows = []
for row in data:
list_of_rows.append(row.split(","))
infile.close()
for item in list_of_rows:
row_as_a_dictionary = {}
for i in range(number_of_columns):
row_as_a_dictionary[keys[i]] = item[i]
list_of_dictionaries.append(row_as_a_dictionary)
for i in range(len(list_of_dictionaries)):
print(list_of_dictionaries[i])

输出:

{'Code': 'cell1', 'Name': 'cell2', 'State': 'cell3', 'Acres': 'cell4', 'Latitude': 'cell5', 'Longitude': 'cell6', 'Date': 'cell7', 'Descriptionn': 'cell8n'}
{'Code': 'cell11', 'Name': 'cell12', 'State': 'cell13', 'Acres': 'cell14', 'Latitude': 'cell15', 'Longitude': 'cell16', 'Date': 'cell17', 'Descriptionn': 'cell18'}

我将创建一个具有构造函数的类,该构造函数将CSV的第一行中的键作为属性。然后创建一个空列表来存储字典。然后打开文件(这是一个内置库,所以我假设您可以使用它)并逐行读取。将行存储为字符串,并使用split方法,以逗号作为分隔符,并将该列表存储在变量中。为每行调用类的构造函数,使用split方法中的列表索引来构造字典。在阅读下一行之前,把字典加到你的列表中。这可能不是最简单的方法,但它不使用任何外部库(尽管正如其他人提到的,有一个内置的CSV模块)。

代码:

#Class with constructor
class Park:
def __init__(self, code, name, state):
self.code = code
self.name = name
self.state = state
#Empty array for storing the dictionaries
parks = []
#Open file
parks_csv = open("parks.csv")
#Skip first line
lines = parks_csv.readlines()[1:]
#Read the rest of the lines
for line in lines:
parkProperties = line.split(",")
newPark = Park(parkProperties[0], parkProperties[1], parkProperties[2])
parks.append(newPark)
#Print park dictionaries
#It would be easier to parse this using the JSON library
#But since you said you can't use any libraries
for park in parks:
print(f'{{code: {park.code}, name: {park.name}, state: {park.state}}}')
#Don't forget to close the file
parks_csv.close()

输出:

{code: ACAD, name: Acadia National Park, state: ME}
{code: ARCH, name: Arches National Park, state: UT}
{code: BADL, name:  Badlands National Park, state: SD}

相关内容

  • 没有找到相关文章

最新更新