1

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

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

我在这里想念什么?

4

3 回答 3

4

您正在拆分选项卡,请尝试拆分空格,而不是仅使用:

str.split()

那么你应该得到你想要的。

于 2012-08-10T11:43:14.780 回答
0

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

于 2012-08-10T11:43:24.773 回答
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)
于 2012-08-10T11:46:39.380 回答