我正在使用下面的脚本从一些轨迹文件中提取数据并将数据转储到新的文件文件中。我可以使用指令“>”将结果重定向到一个文件中,但我需要对超过 2000 个文件这样做。为了方便起见,我尝试打开一个文件并让 python 本身将结果定向到一个文件中。
为了实现这一点,我在代码中的 (##) 位置添加了一行来打开一个文件,如下所示。我还添加了一行将结果定向到文件中,如下面的代码所示,行包含 (###)。
#!/usr/bin/env python
'''
always put -- #!/usr/bin/env python -- at the shebang
'''
from Scientific.IO.NetCDF import NetCDFFile as Dataset
import itertools as itx
inputfile = "../traj-waters/waters1445-MD001-run1000.traj"
for FRAMES in range(0,2):
frame = FRAMES
text_file = open("velo-Output.dat", "w") (##)
#inputfile = 'mdcrd'
ppp = inputfile
def grouper(n, iterable, fillvalue=None):
args = [iter(iterable)] * n
return itx.izip_longest(fillvalue=fillvalue, *args)
formatxyz = "%12.7f%12.7f%12.7f%12.7f%12.7f%12.7f"
formatxyz_size = 6
formatxyzshort = "%12.7f%12.7f%12.7f"
formatxyzshort_size = 3
#ncfile = Dataset(inpitfile, 'r')
ncfile = Dataset(ppp, 'r')
variableNames = ncfile.variables.keys()
#print variableNames
shape = ncfile.variables['coordinates'].shape
'''
do the header
'''
print 'title ' + str(frame)
print "%5i%15.7e" % (shape[1],ncfile.variables['time'][frame])
'''
do the velocities
'''
try:
xyz = ncfile.variables['velocities'][frame]
temp = grouper(2, xyz, "")
for i in temp:
z = tuple(itx.chain(*i))
if (len(z) == formatxyz_size):
print formatxyz % z
text_file.write('formatxyz\n' % z)) (###)
elif (len(z) == formatxyzshort_size): print formatxyzshort % z
except(KeyError):
xyz = [0] * shape[2]
xyz = [xyz] * shape[1]
temp = grouper(2, xyz, "")
for i in temp:
z = tuple(itx.chain(*i))
if (len(z) == formatxyz_size): print formatxyz % z
elif (len(z) == formatxyzshort_size): print formatxyzshort % z
x = ncfile.variables['cell_angles'][frame]
y = ncfile.variables['cell_lengths'][frame]
text_file.close()
但是,如果我按以下方式运行此代码,则会出现错误。
Traceback (most recent call last):
File "./Nctorst-onlyVelo.py", line 73, in <module>
text_file.write(str('formatxyz\n' % z))
TypeError: not all arguments converted during string formatting
由于我是 python 的新手,我发现无法纠正这个问题。
提前感谢您的帮助。问候