如何在Python中将只有一列的csv文件转换为字典?

时间:2018-10-31 22:41:18

标签: python python-3.x csv dictionary python-requests

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

.csv文件在excel中看起来像这样

             A                         B

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

所有内容都在A列中。

我的代码到目前为止看起来像这样:

import csv
reader = csv.reader(open("filename.csv"))
d={}
for row in reader:
    d[row[0]]=row[0:]
print(d)

和输出

{'\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)更改男性/女性。而且我不知道如何找出第一栏的内容。

先谢谢了。

5 个答案:

答案 0 :(得分:1)

您可以使用dict理解并枚举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模块而只需阅读文件即可完成

with open("filename.csv", 'r') as t:
    next(t) # skip first line
    x = {num+1:name.split(" ",1)[-1].strip() for (num, name) in enumerate(t)}

print(x)

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

答案 1 :(得分:0)

这应该适用于给定的输入:

data.csv:

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

代码:

import csv

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

d = {}

for row in reader:
  splitted = row[0].split('.')
  # print splitted[0]
  # print ' '.join(splitted[1].split(' ')[1:])
  d[splitted[0]] = ' '.join(splitted[1].split(' ')[1:])

print(d)

输出

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

答案 2 :(得分:0)

按照Simit,但是使用正则表达式并意识到您的1.AB只是您试图解释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)

答案 3 :(得分:0)

我喜欢用熊猫来做这样的事情。您可以使用Pandas导入它,然后将其导出到字典。

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-句点之前的数字。

我没有包括性别,但它确实不适合该命令。我还假设您的数据没有标题。

下一部分将您的熊猫数据框转换为所需输出中的字典。

output_dict = dict()
for i in range(len(df[['ID','Name']])):
    output_dict[df.iloc[i]['ID']] = df.iloc[i]['Name']

答案 4 :(得分:-2)

import cv with open('Employee_address.txt', mode='r') as CSV_file:
    csv_reader= csv.DirectReader(csv_file)
    life_count=0
    for row in csv_reader:
        if line_count==0:
            print(f'columns names are {",".join()}')
            line += 1
            print(f'\t{row["name"]} works in the {row["department"]} department, and lives in{row["living address"]}.line_count +=1 print(f'Processed {line_count} lines.')