我有一个基本上如下的文件:
atom0
coordinateX coordinateY coordinateZ
atom1
coordinateX coordinateY coordinateZ
...
我正在尝试添加原子编号(从0开始),以便我的文件看起来像这样:
readFile = open("coordinates.txt", 'r')
writeFile = open("coordinatesFormatted.txt", 'w')
index = 1
counter = 0
for lineToRead in readFile:
lineToRead = lineToRead.lstrip()
if index % 2 == 0:
counter = counter + 1
lineToRead+=str(counter)
writeFile.write(lineToRead)
index = index+1
readFile.close()
writeFile.close()
f = open('coordinatesFormatted.txt','r')
temp = f.read()
f.close()
f = open('coordinatesFormatted.txt', 'w')
f.write("0")
f.write(temp)
f.close()
这是我的代码和我的问题:
0atom
coordinateX coordinateY coordinateZ
1atom
coordinateX coordinateY coordinateZ
...
在运行我的代码后,我没有获得所需的输出,而是得到了这个:
{{1}}
任何帮助将不胜感激!
答案 0 :(得分:2)
你有2个组合问题,这是一个有趣的组合:你柜台上的奇怪/偶数问题以及使用cdf.to_csv('/path/to/file.csv',index=False)
代替lstrip
:strip
删除了改变你的换行符线。
我重写了你的代码,删除了现在没用的最后一部分,现在它按预期工作了。
strip
答案 1 :(得分:1)
在循环中运行两个计数器可能会非常混乱。并且你没有正确剥离那些行。
以下内容可以用itertools.count
对象替换index
和count
。新行字符将添加到write
方法的行中:
from itertools import count
c = count() # set up a counter that starts from zero
with open('coordinates.txt') as f, open('coordinatesFormatted.txt', 'w') as fout:
for line in f:
line = line.strip()
if line == 'atom':
line += str(next(c)) # get the next item from the counter
fout.write(line + '\n')