Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/307.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用csv文件[Python]中的行号创建字典_Python_Python 3.x_Csv_Dictionary_Multidimensional Array - Fatal编程技术网

使用csv文件[Python]中的行号创建字典

使用csv文件[Python]中的行号创建字典,python,python-3.x,csv,dictionary,multidimensional-array,Python,Python 3.x,Csv,Dictionary,Multidimensional Array,我有一个CSV文件,包含60名参与者的调查数据。第一列是参与者的编号,每个编号对应从该参与者收集的所有数据。它看起来像: 参与者编号:1,性别:女性,学习水平:研究生 我想创建一个字典,其中键是参与者编号,值是包含所有数据的整行,这样做: {1:女性,研究生,美国人,是的,不是的,不是的,是的,不是的。}等等。我还是一个新手,到目前为止,这是我尝试的: with open('surveys.csv', 'r') as f: reader = csv.reader(f, delimiter

我有一个CSV文件,包含60名参与者的调查数据。第一列是参与者的编号,每个编号对应从该参与者收集的所有数据。它看起来像:

参与者编号:1,性别:女性,学习水平:研究生

我想创建一个字典,其中键是参与者编号,值是包含所有数据的整行,这样做:

{1:女性,研究生,美国人,是的,不是的,不是的,是的,不是的。}等等。我还是一个新手,到目前为止,这是我尝试的:

with open('surveys.csv', 'r') as f:
    reader = csv.reader(f, delimiter=' ')
    with open('new_surveys.csv', mode='w') as outfile:
            writer = csv.writer(outfile)
            mydict = {rows[0]:rows for rows in reader}
            print(mydict)
但这会打印出如下内容:

{'\ufeff':['\ufeff'],'参与者/问题','1.:['参与者/问题','1.','Gender'],'性别','2':[','Level','of','study'],}这对我来说现在没有任何意义

谢谢大家!

编辑:

这是一个完整的数据行:

你可以试试这个吗

import csv
with open('surveys.csv', 'r') as f:
    reader = csv.reader(f, delimiter=' ') 
    mydict={}
    iterreader = iter(reader)
    next(iterreader)
    for row in iterreader:
        elementsList=row[0].split("\t")
        nonEmptyElements=[]
        for element in elementsList[1:]:
            print(element)          
            if(not element.strip()==""):
                nonEmptyElements.append(element)
        valuesList=",".join(nonEmptyElements)
        mydict[elementsList[0]]=valuesList
print(mydict)  
我的CSV看起来像这样

Participant Name    Gender
1   Rupin   Male
2   Poonam  Female
3   Jeshan  Male
{'1': 'Rupin,Male', '2': 'Poonam,Female', '3': 'Jeshan,Male'}
代码避免使用第一行

我的输出如下所示

Participant Name    Gender
1   Rupin   Male
2   Poonam  Female
3   Jeshan  Male
{'1': 'Rupin,Male', '2': 'Poonam,Female', '3': 'Jeshan,Male'}
从中,我们知道原始文件的前100个字节是:

b'\xef\xbb\xbf"\nParticipant/Question","1. Gender\n","2. Level of study\n","3. How often visit SC\n","4. Time of vi' 
这看起来像是从Excel导出的csv,单元格中嵌入了换行符。初始的
b'\xef\xbb\xbf'
是一个字节顺序标记,表示字节编码为“utf-8-sig”

基于此信息,此代码应创建所需的字典:

with open('surveys.csv', 'r', encoding='utf-8-sig') as f:
    reader = csv.reader(f, dialect='excel')
    # Advance the iterator to skip the header row
    next(reader)
    mydict = {row[0]:row for row in reader}
print(mydict)
传递“utf-8-sig”编码可确保字节顺序标记不会被视为数据的一部分。如果您正在使用Excel,在读取和写入csv文件时设置此编码可能是一个好主意


dialent='excel'
传递给读卡器会告诉它使用与excel创建的csv文件相关联的,例如使用逗号作为分隔符。

您好,谢谢。它仍然显示非常奇怪:\n2,男性,UG,每日,下午,':“晚上”,是的,是的,是的,“当,我,我更新了我的答案。我的CSV看起来像这样。参与者姓名性别1 Rupin Male 2 Poonam Male 3 Jeshan Male我不知道这是否与python此时读取我文件的方式有关,我有这么多奇怪的逗号,它仍然是这样的:“,,,,,,,,,,,,,,,,,,,,,,\n1,女性,UG,每日,下午”,“晚上”,是的,“否”,你能用CSV更新你的原始问题吗?嗨,非常感谢你的帮助。我更新了第一行的图片,它们看起来都一样。你可以用open('survey.csv','rb)将
的输出添加为f:print(f.read(100))
?这应该可以让我们计算出列是如何被分离的。嗨,很抱歉错过了这个。这是输出:“参与者/问题”,“1.性别”,“2.学习水平”,“3.多久访问一次SC”",4. 这看起来不像是“rb”模式的输出-我想看看字节,看看原始文件是如何构造的。很抱歉,我完全错过了“rb”的事情,首先我在打开字节时遇到了一个csv.error,然后是:b“参与者/问题”,“1.性别”\t\t\t\r\n,“2.学习水平”\t\t\t\r\n,“3.多久访问一次SC”\t\t\t\t\r\n“,”我认为有太多的解析问题,因为在我的计数器字典中,我有完整的“单词”,如“是,否,有点“,”这个答案可能会将数据放入您想要的
行编号:row
字典中。如果要将单元格拆分为单个单词,则需要在每个单元格上调用
.split()
,可能需要使用nltk的标记器。如果字典看起来不正确,请在此处留下注释和“错误”键/值对的示例。