如何在Python中将一个包含一列的csv文件转换为字典?

2024-09-27 20:15:55 发布

您现在位置:Python中文网/ 问答频道 /正文

我需要一些关于python的作业的帮助。 任务是将.csv文件转换为字典,并进行一些更改。问题是.csv文件只有1列,但有3行。

在excel中.csv文件如下所示

             A                         B

1.male Bob West
2.female Hannah South
3.male Bruce North

所以一切都在A栏

到目前为止,我的代码是这样的:

^{pr2}$

以及输出

{'\ufeffmale Bob West': ['\ufeffmale Bob West'], 'female Hannah South': 
['female Hannah South'], 'male Bruce North': ['male Bruce North']}

但我想要

{1 : Bob West, 2 : Hannah South, 3 : Bruce North}

应使用ID(1、2、3)更改公/母。我不知道怎么搞清楚1列的事。

提前谢谢。


Tags: 文件csv代码字典作业excelmalefemale
3条回答

您可以使用dict comprehension并枚举csv对象

import csv

reader = csv.reader(open("filename.csv"))

x = {num+1:name[0].split(" ",1)[-1].rstrip() for (num, name) in enumerate(reader)}
print(x)

# output,
{1: 'Bob West', 2: 'Hannah South', 3: 'Bruce North'}

也可以不使用csv模块,只需读取文件

^{pr2}$

我喜欢用熊猫来做这种事。您可以使用Pandas导入它,然后将其导出到dict

import pandas as pd

df = pd.read_csv('test.csv',header=-1)
# Creates new columns in the dataframe based on the rules of the question
df['Name']=df[0].str.split(' ',1).str.get(1)
df['ID'] = df[0].str.split('.',1).str.get(0)

数据帧应该有三列:

  • 0-这是原始数据。在
  • 名称-问题中定义的名称。在
  • ID-句点之前的数字。在

我没有把性别包括在内,但它确实不适合这个词。我还假设你的数据没有标题。在

下一部分将pandas数据帧转换为所需输出中的dict。在

^{pr2}$

根据Simit,但是使用正则表达式并意识到您的1.和{}和{}只是在试图解释Excel单元格和列标识符吗

import re, csv

reader = csv.reader(open("data.csv"))

out = {}
for i, line in enumerate(reader, 1):
    m = re.match(r'^(male|female) (.*)$', line)
    if not m:
        print(f"error processing {repr(line)}")
        continue
    out[i] = m[2]

print(out)

相关问题 更多 >

    热门问题