让我们说我有以下字符串
s = """WaveL C[0,0].Pow C[0,0].Pow(s) C[0,0].Pow(p) Balance \n400 0.4411 0.4411 1.7698E-008 0.51322 \n700 0.61133 0.61133 4.0576E-007 0.88026"""
print(s)
> WaveL C[0,0].Pow C[0,0].Pow(s) C[0,0].Pow(p) Balance
> 400 0.4411 0.4411 1.7698E-008 0.51322
> 700 0.61133 0.61133 4.0576E-007 0.88026
现在我想将列的值放入列表。如果我将字符串存储为文本文件,然后使用np.genfromtxt()打开它,它将起作用,但是我看不到另一种简单的方法(没有那么多的开销)...
with open('temp.text', 'w') as file: file.write(s)
file.close()
data = np.genfromtxt('temp.text')
row1 = data[1:,0]
row2 = data[1:,1]
os.remove('temp.text')
您知道我该怎么做吗?
编辑:
对那些回答我如何获得行的家伙们表示抱歉。我实际上是想问如何获得这些专栏。很抱歉这个错误。
答案 0 :(得分:2)
在列表理解中使用str.splitlines
和str.split
例如:
s = """WaveL C[0,0].Pow C[0,0].Pow(s) C[0,0].Pow(p) Balance \n400 0.4411 0.4411 1.7698E-008 0.51322 \n700 0.61133 0.61133 4.0576E-007 0.88026"""
result = [row.split() for row in s.splitlines()]
print(result)
输出:
[['WaveL', 'C[0,0].Pow', 'C[0,0].Pow(s)', 'C[0,0].Pow(p)', 'Balance'],
['400', '0.4411', '0.4411', '1.7698E-008', '0.51322'],
['700', '0.61133', '0.61133', '4.0576E-007', '0.88026']]
根据评论更新。
from collections import defaultdict
s = """WaveL C[0,0].Pow C[0,0].Pow(s) C[0,0].Pow(p) Balance \n400 0.4411 0.4411 1.7698E-008 0.51322 \n700 0.61133 0.61133 4.0576E-007 0.88026"""
result = defaultdict(list)
for row in s.splitlines():
for i, r in enumerate(row.split()):
result[i].append(r)
result = {v[0]: list(map(float, v[1:])) for _, v in result.items()}
print(result)
输出:
{'Balance': [0.51322, 0.88026],
'C[0,0].Pow': [0.4411, 0.61133],
'C[0,0].Pow(p)': [1.7698e-08, 4.0576e-07],
'C[0,0].Pow(s)': [0.4411, 0.61133],
'WaveL': [400.0, 700.0]}
答案 1 :(得分:1)
如果您坚持要求输出为numpy数组,则可以执行以下操作。
s = """ .... """
np.array(s.split('\n', 1)[1])
该字符串被分成几行,但仅一次。您使用结果列表的第二个元素,最后将此字符串转换为numpy数组。
答案 2 :(得分:1)
如果要在没有任何其他库的情况下执行此操作,则可以提取标题,然后在各行中进行迭代。
lines = [l for l in s.splitlines()]
cols={}
for col in lines[0].split(): cols[col]=[]
keys=list(cols.keys())
for i, col in enumerate(lines[1:]):
for e,i in enumerate(col.split()):
cols[keys[e]].append(i) #.append(float(i))
这将为您提供字典,您可以在其中选择各个列:
{'WaveL': ['400', '700'],
'C[0,0].Pow': ['0.4411', '0.61133'],
'C[0,0].Pow(s)': ['0.4411', '0.61133'],
'C[0,0].Pow(p)': ['1.7698E-008', '4.0576E-007'],
'Balance': ['0.51322', '0.88026']
如果您要处理大文件,这可能并不太高效,并且您的最佳使用可能是使用适当的反序列化(例如,查看CSV文件阅读器,例如csv,pandas.read_csv中的-比genfromtxt更强大)