如何解析CSV文件的分隔列,并使它们成为Python文件的一部分

时间:2016-12-29 16:57:46

标签: python csv delimited

我有一个包含以下格式/内容的CSV文件,并希望看到一种更简单的方法来进一步解析col3内容(分隔),以便使用python将它们包含到CSV文件中。

我是新手,简单的循环方法应该有效,但我想知道实现它的任何更简单,更快捷的方法。

自:

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"

2 个答案:

答案 0 :(得分: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")

答案 1 :(得分: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文件的写作。这将以一致的格式返回列。但是你会注意到一些没有被处理过的标点符号。这也很容易解决。

如果这种方法适合您,请告诉我。