在python中用不同的分隔符分隔一个字符串

时间:2017-11-15 07:54:44

标签: python csv delimiter

我遇到了一个csv文件,这让我想知道从中获取信息的正确流程应该是什么。我想读取每一行,然后读取变量lastname,firstname和department中的每一行,但是

csv文件的结构就像这样

lastname, firstname (department)

假设我们有一个名字Jean-Claude Van Damme

Van Damme, Jean-Claude (Karate-Master)

在变量lastname,firstname和department中分隔这样的字符串和存储的最佳方法是什么?

import csv
import string
import re

file = open('path/testing_delimiters.csv', 'rb')
reader = csv.reader(file)
for row in reader:
    data = map(string.strip, row)
print data
# output so far
# ['Van Damme', 'Jean-Claude (Karate-Master)']

任务是分离让 - 克劳德和(空手道 - 大师)

# expected output
# ['Van Damme', 'Jean-Claude', 'Karate-Master']

3 个答案:

答案 0 :(得分:2)

您可以使用正则表达式和捕获组:

import re
s = 'Van Damme, Jean-Claude (Karate-Master)'
m = re.match(r'([^,]*),\s+([^,]+)\s+\(([^\(\)]*)\)', s)
lastname, firstname, department = m.groups()
# [^,]*   any non-comma, zero or more
# [^\(\)]*   any non-(), zero or more
# \s+   any whitespace char, one or more
# (...) capturing group
# \( \) match parenthesees, escaped because of special meaning

答案 1 :(得分:0)

您可以使用 Pandas 库:

import pandas as pd
df = pd.read_csv('your_file.csv',sep=',|\(',engine='python',header=None)

使用两个分隔符,( 然后你可以剥离)

df[2]=df[2].str.strip(')')
在这种情况下,

[2]是列号。

答案 2 :(得分:-1)

如果它来自csv文件,那么我认为你可以导入csv module。然后你可以逐行迭代它,你需要用逗号分割它们。在姓氏上,您可以使用正则表达式\((.*?)\)在括号之间搜索单词。最后你需要删除支架。