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

2024-10-06 14:22:57 发布

您现在位置:Python中文网/ 问答频道 /正文

例如:

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

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


Tags: myfunctionn4
3条回答

将列表理解与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.

如果输入是长度为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()构造函数即可。你知道吗

使用列表理解:

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']]

或者,您可以使用^{},它的工作方式与.split()类似,但它将拆分任何换行符组合上的数据,即\r\n\r\n。它处理最后一行也有点聪明。你知道吗

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

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可以处理任何iterable,包括.splitlines()的结果:

reader = csv.reader(somestring.splitlines())
for row in reader:
    # row is a list of column values

相关问题 更多 >