我需要一些有关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)更改男性/女性。而且我不知道如何找出第一栏的内容。
先谢谢了。
答案 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)
这应该适用于给定的输入:
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.
和A
和B
只是您试图解释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)
数据框应包含三列:
我没有包括性别,但它确实不适合该命令。我还假设您的数据没有标题。
下一部分将您的熊猫数据框转换为所需输出中的字典。
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.')