首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在Python中跨越文本文件的N行

如何在Python中跨越文本文件的N行
EN

Stack Overflow用户
提问于 2016-11-02 17:50:20
回答 1查看 68关注 0票数 0

你好,我正在尝试将文件disp.txt转换为:

代码语言:javascript
复制
116  C             0.12 -0.91  0.39    -0.40  0.31  0.85    -0.66 -0.18 -0.22
117  O             0.00 -0.02  0.00    -0.05  0.05  0.12    -0.57 -0.26 -0.29
116  C            -0.03 -0.04  0.00     0.01  0.09  0.19    -0.71 -0.21 -0.26
117  O            -0.14  0.88 -0.45     0.47 -0.33 -0.79     0.57  0.16  0.19

到disp.mol:

代码语言:javascript
复制
vibration 1
0.12  -0.91  0.39
0.0  -0.02  0.0
vibration 2
-0.4  0.31  0.85
-0.05  0.05  0.12
vibration 3
-0.66  -0.18  -0.22
-0.57  -0.26  -0.29
vibration 4 
-0.03 -0.04 0.00 
-0.14 0.88 -0.45
vibration 5 ...

我使用open(‘displ.txt’,'w')作为f打开disp.txt文件: 使用line= f.readlines()在行中读取 用x分隔数据行: numbers = x.split() 然后添加vib1.append(Numbers2)、vib2.append并将它们存储在vib1=[]、vib2=[]等中。

当我需要将我以disp.mol格式存储的数据时,我的问题就出现了。使用下面的代码,我可以从前两行获得前三次振动的输出,但我不知道如何在接下来的两行上执行相同的循环(以及是否有更多的2N行)。我也不知道如何对每个振动进行编号。如果能提供任何帮助,我们将不胜感激。

代码语言:javascript
复制
with open('disp.mol', 'w') as thisfile:
        thisfile.writelines('vibration')
        thisfile.writelines('\n')
        for x in range (0, 2):
                vib_one = str(vib1[x]) + '  ' +  str(vib2[x]) + '  ' +  str(vib3[x])
                thisfile.writelines(vib_one)
                thisfile.writelines('\n')
        thisfile.writelines('vibration')
        thisfile.writelines('\n')
        for x in range (0, 2):
                vib_two = str(vib4[x]) + '  ' +  str(vib5[x]) + '  ' +  str(vib6[x])
                thisfile.writelines(vib_two)
                thisfile.writelines('\n')
        thisfile.writelines('vibration')
        thisfile.writelines('\n')
        for x in range (0, 2):
                vib_three = str(vib7[x]) + '  ' +  str(vib8[x]) + '  ' +  str(vib9[x])
                thisfile.writelines(vib_three)
                thisfile.writelines('\n')

输出:

代码语言:javascript
复制
vibration
0.12  -0.91  0.39
0.0  -0.02  0.0
vibration
-0.4  0.31  0.85
-0.05  0.05  0.12
vibration
-0.66  -0.18  -0.22
-0.57  -0.26  -0.29
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-11-02 18:06:53

以下是一种方法:

代码语言:javascript
复制
with open('disp.txt') as f, open('disp.mol','w') as out:
    vibration = 1
    for line in f:
        line1 = line.split()
        line2 = next(f).split() # also get next line
        for i in range(2,len(line1),3):
            out.write('vibration {}\n'.format(vibration))
            out.write(' '.join(line1[i:i+3])+'\n')
            out.write(' '.join(line2[i:i+3])+'\n')
            vibration += 1

输出:

代码语言:javascript
复制
vibration 1
0.12 -0.91 0.39
0.00 -0.02 0.00
vibration 2
-0.40 0.31 0.85
-0.05 0.05 0.12
vibration 3
-0.66 -0.18 -0.22
-0.57 -0.26 -0.29
vibration 4
-0.03 -0.04 0.00
-0.14 0.88 -0.45
vibration 5
0.01 0.09 0.19
0.47 -0.33 -0.79
vibration 6
-0.71 -0.21 -0.26
0.57 0.16 0.19
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40386544

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档