python将多列文件读入数组

时间:2012-08-10 11:31:54

标签: python

我正在尝试阅读一个看起来像这样的文件:

Protein in water
5826
300LEU      N 2945   7.972  16.153  13.055 -0.0183  0.4861 -0.4376
300LEU      H 2946   8.006  16.194  13.139  1.5894  1.3176 -1.4422
300LEU     CA 2947   8.017  16.020  13.016  0.1247  0.7136 -0.1096
300LEU     CB 2948   8.157  15.990  13.077 -0.0499  0.0576  0.0414
300LEU     CG 2949   8.273  16.081  13.032 -0.3927 -0.5342  0.1311
300LEU    CD1 2950   8.271  16.143  12.895  0.2232  0.1271  0.2677
300LEU    CD2 2951   8.281  16.197  13.136  0.0409 -0.0097  0.0710
300LEU      C 2952   7.917  15.908  13.047  0.5031  0.0949  0.0620
300LEU      O 2953   7.955  15.799  13.093 -0.2261 -0.5800  0.0226

我必须剥离前两行并分别读取不同的列。 我试过这个:

 with open('file.txt') as fa:
     for line_aa in fa.readlines()[3:11]:
         line_aa = line_aa.strip()
         print line_aa
         col1,col2,col3,col4,col5,col6,col7,col8,col9 = line_aa.split('\t',9)

但是我收到以下错误:

300LEU      H 2946   8.110  15.548  13.027 -0.0632  0.8718 -0.8443
Traceback (most recent call last):
File "rmsd_cg_vs_aa.py", line 50, in <module>
col1,col2,col3,col4,col5,col6,col7,col8,col9 = line_aa.split('\t',9)
ValueError: need more than 1 value to unpack

我在这里缺少什么?

3 个答案:

答案 0 :(得分:4)

您正在拆分标签,尝试拆分空白而不是仅使用:

str.split()
那么你应该得到你想要的东西。

答案 1 :(得分:0)

我认为在这一行'300LEU H 2946 8.110 15.548 13.027 -0.0632 0.8718 -0.8443'。 Python将空格视为普通空格而不是制表符(\ t)。请尝试打印空白的ascii(ord()),并确保它是'\ t'。如果没有用适当的字符分割字符串。也许你可以用空间拆分并剥离它。

答案 2 :(得分:0)

由于某种原因,\ t分割只返回一个值,因此在尝试将这一个值应用于第1列到第9列时会引发错误。

试试这个:

print(len(line_aa.split('\t',9))

它打印1对吗?

我建议你只用空格而不是标签分开:

col1,col2,col3,col4,col5,col6,col7,col8,col9 = line_aa.split(maxsplit=9)