我必须分析地震数据,在开始分析数据之前,我必须改变数据列表方式的格式。我必须改变格式:
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", ...]
我对原始格式(省略网址)的代码是:
def fileToList(url):
alist = []
source = urllib2.urlopen(url)
for line in source:
items = line.strip()
alist.append(items)
return alist
我试图创建变量幅度和earthquakeloc来重新排列alist的格式,但我不知道从哪里开始。我对编码很新。任何建议都会很精彩,谢谢。
答案 0 :(得分:0)
如果您担心格式化问题,那么我会使用collections.namedtuple
作为中间值:
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')
最后,如果您的数据集很大,使用正则表达式可能会更有意义。但是使用str.split
解析数据并将其保存在namedtuples
并不是很复杂,所以我使用了这种方法。
答案 1 :(得分:0)
提示:
>>> 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']
答案 2 :(得分:0)
假设您的c - 'A'
变量包含以下行:
'Z'
在最简单的情况下,使用source
和14km WSW of Willow, Alaska$2.4
4km NNW of The Geysers, California$0.9
13km ESE of Coalinga, California$2.1
函数就足够了:
str.split
输出应如下所示:
str.join
答案 3 :(得分:0)
您似乎只是尝试重新排序每个字符串格式化的方式,因此如果您在多行字符串中包含初始数据,那么:
earthquake_data = """14km WSW of Willow, Alaska$2.4
4km NNW of The Geysers, California$0.9
13km ESE of Coalinga, California$2.1"""
然后你可以在换行符上拆分它以获得字符串列表:
lines = data.split('\n')
>>> ['14km WSW of Willow, Alaska$2.4', '4km NNW of The Geysers, California$0.9', '13km ESE of Coalinga, California$2.1']
并且对于数据列表中的每个项目,将其拆分为' $'符号,它将为您留下如下列表:
split_lines = [l.split('$') for l in lines]
>>> [['14km WSW of Willow, Alaska', '2.4'], ['4km NNW of The Geysers, California', '0.9'], ['13km ESE of Coalinga, California', '2.1']]
然后,您可以使用str.join()字符串方法将每个列表重新连接到字符串中,对列表解析中的每个项目进行处理:
reformatted_data = [", ".join([l[1], l[0]]) for l in split_lines]
>>> ['2.4, 14km WSW of Willow, Alaska', '0.9, 4km NNW of The Geysers, California', '2.1, 13km ESE of Coalinga, California']
这里所有内容都包含在一个函数中:
def reformatStrings(data):
lines = data.split("\n")
split_lines = [l.split('$') for l in lines]
reformatted_data = [", ".join([l[1], l[0]]) for l in split_lines]
return reformatted_data
print(reformatStrings(earthquake_data))