改变字符串列表的格式

2024-05-07 13:24:21 发布

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

我必须分析地震数据,在我开始分析数据之前,我必须改变数据列表的格式。我必须将格式从:

14km WSW of Willow, Alaska$2.4
4km NNW of The Geysers, California$0.9
13km ESE of Coalinga, California$2.1
...

收件人:

["2.4, 14km WSW of Willow, Alaska", "0.9, 4km NNW of The Geysers, California",
"2.1, 13km ESE of Coalinga, California", ...]

我的原始格式代码(省略url)是:

def fileToList(url):
    alist = []
    source = urllib2.urlopen(url)
    for line in source:
        items = line.strip()
        alist.append(items)
    return alist

我试图创建变量magnitude和earthquakeloc来重新排列alist的格式,但是我不知道从哪里开始。我对编码很陌生。任何建议都很好,谢谢。你知道吗


Tags: ofthe数据urlsource格式esecalifornia
3条回答

如果您担心格式化,那么我会使用^{}作为中间值:

from collections import namedtuple

Data = namedtuple('Data', ['position', 'magnitude'])

mystr = """14km WSW of Willow, Alaska$2.4
4km NNW of The Geysers, California$0.9
13km ESE of Coalinga, California$2.1"""

list_of_data = []
for line in mystr.split('\n'):   # equivalent to your "for line in source"
    list_of_data.append(Data(*line.split('$')))

这将为您提供以下信息:

>>> list_of_data
[Data(position='14km WSW of Willow, Alaska', magnitude='2.4'),
 Data(position='4km NNW of The Geysers, California', magnitude='0.9'),
 Data(position='13km ESE of Coalinga, California', magnitude='2.1')]

易于操作:

>>> ['{x.magnitude}, {x.position}'.format(x=x) for x in list_of_data]
['2.4, 14km WSW of Willow, Alaska',
 '0.9, 4km NNW of The Geysers, California',
 '2.1, 13km ESE of Coalinga, California']

或按大小排序:

>>> sorted(list_of_data, key=lambda x: x.magnitude)
[Data(position='4km NNW of The Geysers, California', magnitude='0.9'),
 Data(position='13km ESE of Coalinga, California', magnitude='2.1'),
 Data(position='14km WSW of Willow, Alaska', magnitude='2.4')

最后,如果您的数据集很大,那么使用regex可能更有意义。但是用str.split解析数据并将其保存在namedtuples中并不复杂,所以我使用了这种方法。你知道吗

假设您的source变量包含以下行:

14km WSW of Willow, Alaska$2.4
4km NNW of The Geysers, California$0.9
13km ESE of Coalinga, California$2.1

在最简单的情况下,使用str.splitstr.join函数就足够了:

def fileToList(url=''):
    source = urllib2.urlopen(url)

    return [', '.join(l.split('$')[::-1]) for l in source.split('\n') if l.strip()]

print(fileToList())

输出如下:

['2.4, 14km WSW of Willow, Alaska', '0.9, 4km NNW of The Geysers, California', '2.1, 13km ESE of Coalinga, California']

提示:

>>> a = "14km WSW of Willow, Alaska$2.4"
>>> a = a.split("$")   split the string on `$`
>>> a
['14km WSW of Willow, Alaska', '2.4']
>>> a = a[::-1]        reverse the list    
>>> a
['2.4', '14km WSW of Willow, Alaska']
>>> ",".join(a)            give jon on `,`
'2.4,14km WSW of Willow, Alaska'

一行:

>>> ",".join(a.split("$")[::-1])
'2.4,14km WSW of Willow, Alaska'

为您的预期输出Pythonic方式:

>>> myString = """14km WSW of Willow, Alaska$2.4
... 4km NNW of The Geysers, California$0.9
... 13km ESE of Coalinga, California$2.1"""
>>> map(lambda x: ",".join(x.split("$")[::-1]), myString.strip().split("\n"))
['2.4,14km WSW of Willow, Alaska', '0.9,4km NNW of The Geysers, California', '2.1,13km ESE of Coalinga, California']

相关问题 更多 >