编写一个名为“ csv_to_kvs”的函数,该函数将一个字符串作为参数来表示CSV文件的名称,该文件具有4列,格式为“字符串,浮点,浮点,浮点”,并返回一个新的键值存储映射字符串到浮点数字。返回的键值存储将为文件中的每一行提供一对,其中CSV文件的第一列中的键来自第三列中的值。 (下面的代码)
import csv
def csv_to_kvs(string):
with open(string) as f:
file = csv.DictReader(f)
for column in file:
for key in column.keys():
return key
for value in column.values():
return value
提交以下函数csv_to_kvs
时,输入错误。
输入experienced.csv
:
spite,-11.09,3.92,7.38
questionnaire,12.8,-4.39,-0.14
literally,19.5,-3.94,-5.06
colleague,17.19,-15.3,0.12
返回:"spite"
预期:{'colleague': -15.3, 'spite': 3.92, 'questionnaire': -4.39, 'literally': -3.94}
答案 0 :(得分:1)
csv.DictReader
希望标题是第一行的列,而不是第一列的行。
您应该改为使用csv.reader
来读取行,并以zip
对其进行转置,以将第一个项目作为标头解包,将其余的作为数据解压缩,然后使用列表推导来构造字典列表:
with open(string) as f:
headers, *data = zip(*csv.reader(f))
l = [{header: item for header, item in zip(headers, lst)} for lst in data]
使用示例输入,l
将变为:
[{'spite': '-11.09', 'questionnaire': '12.8', 'literally': '19.5', 'colleague': '17.19'}, {'spite': '3.92', 'questionnaire': '-4.39', 'literally': '-3.94', 'colleague': '-15.3'}, {'spite': '7.38', 'questionnaire': '-0.14', 'literally': '-5.06', 'colleague': '0.12'}]
,第三列将简单地为l[1]
:
{'spite': '3.92', 'questionnaire': '-4.39', 'literally': '-3.94', 'colleague': '-15.3'}
答案 1 :(得分:0)
您可以使用csv.reader()
。这可以帮助您将row
读为list
。
import csv
def csv_to_kvs(string):
with open(string) as f:
my_file = csv.reader(f)
my_dict = {}
for row in my_file:
# as you want to key value as the first one and value will be third one
my_dict[row[0]] = row[2]
return my_dict
输出: {'spite': '3.92', 'questionnaire': '-4.39', 'literally': '-3.94', 'colleague': '-15.3'}
答案 2 :(得分:0)
Python Pandas is a great library to read and write CSV files
* Read CSV file -
import pandas as pd
data = pd.read_csv("filename.csv")
data.head()
* Write CSV file -
import pandas as pd
result = {Any key value pair data}
df = pd.DataFrame(data=result)
df.to_csv(filepath.csv, sep='\t', encoding='utf-8')