【问题标题】:Python load txt into array with stringPython将txt加载到带有字符串的数组中
【发布时间】:2015-08-13 05:22:23
【问题描述】:

我想将我的以下内容从 txt 加载到一个数组中。

发件人:

ATOM      1  N   ASP P   1     -13.459   3.135 -11.039  1.00  0.00      PROT N
ATOM      2  HT1 ASP P   1     -13.111   4.105 -11.181  1.00  0.00      PROT H
ATOM      3  HT2 ASP P   1     -14.481   3.257 -11.190  1.00  0.00      PROT H

到两个数组:

[[ 'ATOM', '1', 'N', 'ASP', 'P', '1' ], [ 'ATOM', '1', .....] ]

还有一个浮点数组供以后 numpy.dot 计算

array([ [-13.459, 3.135, -11.039], [-13.111, 4.105, -11.181], [....] ])

有人知道怎么做吗?

【问题讨论】:

  • 制表符是分隔符吗?看看 csv 。
  • 试试这个inp="ATOM 1 N ASP P 1 -13.459 3.135 -11.039 1.00 0.00 PROT N" lst=inp.split() lst1=[] lst2=[] lst1.append(lst[0:5]) lst2.append(lst[6:9])
  • 我应该说得更清楚。第二个我需要它是一个带有浮点数的数组。谢谢 Vignesh,但是我以后应该如何将它转换为浮点数组而不是字符串?

标签: python arrays string load


【解决方案1】:

看完str.splitdocumentation。

如果 sep 未指定或为 None,则应用不同的分割算法:连续空格的运行被视为单个分隔符

您可以在不使用正则表达式的情况下仅使用split 函数来完成此操作。

list1 = []
list2 = []
with open("stackoverflow.txt", "r") as f:  
    for line in f.readlines():
        l = line.split()
        list1.append(l[:6])
        list2.append(l[6:9])
print list1
print list2    

结果

[['ATOM', '1', 'N', 'ASP', 'P', '1'], ['ATOM', '2', 'HT1', 'ASP', 'P', '1'], ['ATOM', '3', 'HT2', 'ASP', 'P', '1']]
[['-13.459', '3.135', '-11.039'], ['-13.111', '4.105', '-11.181'], ['-14.481', '3.257', '-11.190']]

感谢 Vignesh Kalai 的评论。

【讨论】:

  • 你可以使用split() rather then converting space and then splitting
  • 如果我想要 list2 作为浮点数组怎么办?我试过数组('f',list2)。它不适用于列表。对于 astype,它只适用于数组。
【解决方案2】:

试试这个,希望它有效!

var="ATOM 1 N ASP P 1 -13.459 3.135 -11.039 1.00 0.00 PROT N"
list=var.split() 
list1=[] list2=[] 
list1.append(list[0:5]) 
list2.append(list[6:9])

【讨论】:

  • @Chaker 没有理由拒绝投票,只是评论说它有效果
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-08-16
  • 2020-05-03
  • 2021-09-04
  • 2013-08-02
  • 1970-01-01
  • 1970-01-01
  • 2012-08-15
相关资源
最近更新 更多