2016-12-29 1 views
0

У меня есть файл CSV со следующим форматом/содержимым и хотел бы видеть более простой способ дальнейшего анализа содержимого col3 (с разделителями), чтобы включить их в CSV-файл, используя python.Как разобрать столбец с разделителями CSV-файла и сделать его частью файла CSV с помощью Python

Я новичок в этом, и простой подход петли должен работать, но я хотел бы знать любой более простой и быстрый способ реализовать это.

От:

col1,col2,col3,col4 
1,"David","Job=Sales Manager;Hobby=reading;Sex=Male","31" 
2,"Mary","Job=Nurse;Hobby=hiking;Sex=Female","23" 

к:

col1,col2,Job,Hobby,Sex,col4 
1,"David","Sales Manager","reading","Male","31" 
2,"Mary","Nurse","hiking","Female","23" 
+1

@Patryk Пожалуйста, не изменяйте форматирование данных OP. Они никогда не говорили, что между полями есть пробелы. – ThisSuitIsBlackNot

+0

Предоставьте код, который показывает, что вы подразумеваете под «простым циклом», который должен «работать», и что вы считаете неправильным, ваши вопросы слишком неоднозначны и, возможно, основаны на мнениях как есть. – Jmills

ответ

0

Вы можете использовать pandas библиотеку, которая помогает сделку с табличными данными в довольно простой способ:

import pandas as pd 
df = pd.read_csv("xxx.csv") 

new_df = pd.concat([df.drop('col3', axis=1), 
        df.col3.apply(lambda s: pd.Series(dict(tuple(p.split('=')) for p in s.split(";"))))], 
        axis=1) 

enter image description here

Для того, чтобы написать, как .csv, просто вызовите to_csv(): new_df.to_csv("newXXX.csv")

0

Это простой базовый класс подход с функцией синтаксического анализа и функцию вывода.

import csv 

class Person: 

    def __init__(self, string): 
     self.attributes = {} 
     data = string.split(",") 
     self.attributes["id"] = data[0] 
     self.attributes["name"] = data[1] 
     self.attributes["age"] = data[3] 

     self.parse_data(data[2]) 

    def parse_data(self, data): 
     for attr in data.split(";"): 
      entry = attr.split("=") 
      self.attributes[entry[0]] = entry[1] 

    def return_data(self): 
     return ','.join(self.attributes.values()) 

input = '''1,"David","Job=Sales Manager;Hobby=reading;Sex=Male","31" 
2,"Mary","Job=Nurse;Hobby=hiking;Sex=Female","23"''' 

people = [] 

for line in input.split("\n"): 
    person = Person(line) 
    people.append(person) 

print(','.join(people[0].attributes.keys())) # print the keys 

for person in people: 
    print(person.return_data()) # print the data 

Легкий (и относительно прост в использовании), я оставил чтение записи csv-файлов из него. Это вернет столбцы в согласованном формате. Вы заметите, однако, некоторые знаки препинания, о которых не позаботились. Это также можно легко исправить.

Сообщите мне, подходит ли этот подход для вас.

Смежные вопросы