我已编写代码来阅读以下文本文件
Generated by trjconv : a bunch of waters t= 0.00000
3000
1SOL OW 1 -1.5040 2.7580 0.6820
1SOL HW1 2 1.4788 2.7853 0.7702
1SOL HW2 3 1.4640 2.8230 0.6243
2SOL OW 4 1.5210 0.9510 2.2050
2SOL HW1 5 -1.5960 0.9780 2.1520
2SOL HW2 6 1.4460 0.9940 2.1640
1000SOL OW 2998 1.5310 1.7952 2.1981
1000SOL HW1 2999 1.4560 1.7375 -2.1836
1000SOL HW2 3000 1.6006 1.7369 2.2286
3.12736 3.12736 3.12736
Generated by trjconv : a bunch of waters t= 9000.00000
3000
1SOL OW 1 1.1579 0.4255 2.1329
1SOL HW1 2 1.0743 0.3793 2.1385
书面代码:
F = open('Data.gro', 'r')
A = open('TTT.txt', 'w')
XO = []
I = range(1, 10)
with open('Data.gro') as F:
for line in F:
if line.split()[0] == '3000':
A.write('Frame' + '\n')
for R in I:
line = next(F)
P = line.split()
x = float(P[3])
XO.append(x)
if line.split()[2] == '3000':
print('Oxygen atoms XYZ coordinates:')
A.write('Oxygen atoms XYZ coordinates:' + '\n')
A.write("%s\n" % (XO))
XO
XO[0] - XO[1]
XO = []
else:
pass
else:
pass
A.close()
第一个问题:
我的问题是Out put文本文件在一行中如下所示。它在文本文件中打印为一行。
FrameOxygen atoms XYZ coordinates:[-1.504, 1.4788, 1.464, 1.521, -1.596, 1.446, 1.531, 1.456, 1.6006]FrameOxygen atoms XYZ coordinates:[1.1579, 1.0743, 1.1514, 2.2976, 2.2161, 2.3118, 2.5927, -2.5927, 2.5365]
输出应如下所示。
Frame
Oxygen atoms XYZ coordinates:
[-1.504, 1.4788, 1.464, 1.521, -1.596, 1.446, 1.531, 1.456, 1.6006]
Frame
Oxygen atoms XYZ coordinates:
[1.1579, 1.0743, 1.1514, 2.2976, 2.2161, 2.3118, 2.5927, -2.5927, 2.5365]
但是当我正在阅读时,它显示了' \ n'在每个分离点的末尾。 有没有人有想法。
第二个问题
下一个问题是,只有在我将粘贴代码复制到python shell时才会生成。如果双击我的' code.py'文件它不生成put文件。将粘贴代码复制到python shell时没有错误。
答案 0 :(得分:4)
1)您使用的是哪个平台和编辑器?
'\ n'应按预期工作。
我怀疑您在Windows中运行代码,并使用记事本检查文件。尝试使用Wordpad或其他功能更强的编辑器打开TTT.txt。结果应该符合预期。
2)如果你在MS Windows中点击脚本加倍,你很可能错过了python打印的一些例外。尝试在命令提示符下运行它:
python code.py
答案 1 :(得分:2)
Anthoney是正确的。
Windows存在此问题。使用写字板打开文件。
答案 2 :(得分:1)
回答你的第一个问题:
'\n'
,转义n
,是换行符。
回答你的第二个问题:
粘贴到shell时经常遇到的问题是粘贴发生的速度比shell处理的速度快,这意味着shell可以忽略这些行。
您可能遇到的另一个问题,特别是如果您将上述代码粘贴到shell中,则是不一致的缩进。
你的if和else没有排成一行,可能是因为你只缩进了前一行的3个空格。
if line.split()[2] == '3000':
print('Oxygen atoms XYZ coordinates:')
A.write('Oxygen atoms XYZ coordinates:' + '\n')
A.write("%s\n" % (XO))
XO
XO[0] - XO[1]
XO = []
else:
pass
此外,您可以嵌套文件的开头。特别是,这条线是多余的,可以删除:
F = open('Data.gro', 'r')
你可以这样做:
...
with open('Data.gro') as F:
with open('TTT.txt', 'w') as A:
...
因此,如果您在编写文件时出错,您仍然至少会关闭它。 (这意味着你可以在最后删除A.close()。)