如何编写一个在逗号字符上分割每一行的函数?

时间:2013-06-22 10:19:43

标签: python split

例如:

Myfunction("1,2,3\n4,5,6")

输出将为[["1","2","3"],["4","5","6"]]

4 个答案:

答案 0 :(得分:7)

使用列表理解:

def myfunction(somestring):
    return [line.split(',') for line in somestring.split('\n')]

演示:

>>> def myfunction(somestring):
...     return [line.split(',') for line in somestring.split('\n')]
... 
>>> myfunction("1,2,3\n4,5,6")
[['1', '2', '3'], ['4', '5', '6']]

或者,您可以使用str.splitlines(),其工作方式与.split()类似,但会在任何换行符字符组合上拆分数据,即\r,{ {1}}或\n。它处理最后一行也更聪明。

如果此数据来自文件,请考虑使用正确的工具; csv module可以更好地处理逗号分隔数据引用的复杂性:

\r\n

数据 来自文件,import csv with open('/your/csv/file.csv', 'rb') as inputfile: reader = csv.reader(inputfile) for row in reader: # row is a list of column values 可以处理任何可迭代的内容,包括csv的结果:

.splitlines()

答案 1 :(得分:2)

将列表理解与str.splitstr.splitlines

一起使用
>>> strs = "1,2,3\n4,5,6"
>>> strs.splitlines()
['1,2,3', '4,5,6']
>>> [x.split(',') for x in strs.splitlines()]
[['1', '2', '3'], ['4', '5', '6']]

str.splitlines上的帮助:

>>> print str.splitlines.__doc__
S.splitlines(keepends=False) -> list of strings

Return a list of the lines in S, breaking at line boundaries.
Line breaks are not included in the resulting list unless keepends
is given and true.

答案 2 :(得分:2)

如果输入是长度为N的M行,这里是一个采用O(N)空间而不是O(M * N)的生成器:

def myfunction(text):
    from StringIO import StringIO
    for line in StringIO(text):
        yield line.rstrip().split(',')

它返回迭代器而不是具体列表,以减少内存消耗。您可以在for循环或类似循环中使用结果,如果您确实希望将输出作为列表,只需将其传递给list()构造函数。

答案 3 :(得分:1)

如果您正在编写此函数以从文件中读取内容,那么csv模块就是您的朋友:

import csv

with open('somefile.txt') as f:
   reader = csv.reader(f, delimiter=',')
   lines = list(reader)