Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/design-patterns/2.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
Python 如何根据单词将csv列拆分为多个不同的列?_Python_Python 3.x_Csv - Fatal编程技术网

Python 如何根据单词将csv列拆分为多个不同的列?

Python 如何根据单词将csv列拆分为多个不同的列?,python,python-3.x,csv,Python,Python 3.x,Csv,我在一个csv文件中有一个数据集,它位于一列中,但列中的每一行都包含可能是具有值的列数据的数据。我不确定如何解析数据,以便数据被列数据和相关值分解。数据如下所示: A列第1行: Name:Jane Doe ID:123456 Company: J.Crew Allergies: None Age:25 Job Title: Analyst Name: John Doe ID: 654321 Company:Banana Republic Allergies: p

我在一个csv文件中有一个数据集,它位于一列中,但列中的每一行都包含可能是具有值的列数据的数据。我不确定如何解析数据,以便数据被列数据和相关值分解。数据如下所示:

A列第1行:

Name:Jane Doe 
ID:123456  
Company: J.Crew  
Allergies: None  
Age:25  
Job Title: Analyst 
Name: John Doe  
ID: 654321  
Company:Banana Republic  
Allergies: peanuts   
Age:32  
Job Title:Manager
A列第2行:

Name:Jane Doe 
ID:123456  
Company: J.Crew  
Allergies: None  
Age:25  
Job Title: Analyst 
Name: John Doe  
ID: 654321  
Company:Banana Republic  
Allergies: peanuts   
Age:32  
Job Title:Manager
有一百行类似于这些,我希望它将数据转换为名称列、ID列、公司列、年龄列、职务列。我想删除过敏物品

示例CSV文件:


稍后我将查找一些示例代码,但逻辑如下:

  • 创建一个字符串来保存新数据(myNewData)
  • 打开文件
  • 逐行读取文件
  • 用冒号分隔行
  • 识别行中的第一个单词(拆分的第一部分)
  • 如果第一个单词不是“Name:”,也不是allergies,那么添加一个逗号和值(第二部分从4中拆分,并删除空格)。将此附加到myNewData
  • 如果第一个词是过敏,那么放弃并开始下一个循环
  • 如果第一个单词是“Name:”,则添加换行符('\n')和值
  • 流程完成后,将myNewData写入新文件
  • 示例代码如下:

    #! /usr/bin/env python
    
    def decider(line):    
        try:
            first_part, second_part = lines.split(':')
            if first_part not in ('Name', 'Allergies'):
                return ',' + second_part.strip()
            elif first_part == 'Name':
                return '\n' + second_part.strip()
            else:
                return ''
        except:
            return ''
    
    with open('text.txt', 'r') as f:
        myNewData = 'Name,ID,Company,Age,Job'
        for lines in f.readlines():
            myNewData += decider(lines)
        # print(myNewData)
        with open('output.csv', 'w') as fo:
            fo.write(myNewData)
    
    你有一个很好的新csv

    输出将如下所示:

    姓名、身份证、公司、年龄、职务
    简·多伊,123456,J.Crew,25岁,分析师

    John Doe,654321,香蕉共和国,32岁,经理

    请编辑您的问题并包含文件中的实际样本数据(我们不需要全部内容,您可以更改数据以保护无辜)。行中没有逗号?如果不是,那么它就不是CSV。你能将实际文件的前几行添加到你的问题中吗?我附上了一张csv文件的示例图片。我需要以列形式输出。因此,您有一列名称,其中的行以不同的名称向下排列。这就是上面的输出将给您的结果。如果您的意思是希望数据以空格而不是逗号分隔,那么您可以将
    return'、'+second\u part.strip()
    行更改为
    return'\t'+second\u part.strip()
    -您可能还想考虑将列括在引号中,这取决于您以后打算使用它的内容(
    \t
    是制表符),谢谢您的帮助!如果我的职称后面有一些没有起始关键字的自由格式行文本,有没有一种简单的方法将其包含在职称后面的一列中?是的,需要一些重新调整。希望你说的顺序是工作名称:工作代码->换行符->自由文本(人员描述、评论等),可能包括也可能不包括换行符->使用名称重新启动结构化处理,其中自由文本中没有以“名称:”开头的行!