Python:读取和写入文件,并使用函数修改它们
我有一个名为Python:读取和写入文件,并使用函数修改它们,python,function,file-io,Python,Function,File Io,我有一个名为Energy\u vs\u volume.dat的文件,看起来像: # volume energy 64 -180.001 63 -180.002 62 -180.005 . . . . . . 我已经编写了一个名为calculate.py的python脚本,其中包含一个函数。 我想修改名为calculate.py的python脚本
Energy\u vs\u volume.dat
的文件,看起来像:
# volume energy
64 -180.001
63 -180.002
62 -180.005
. .
. .
. .
我已经编写了一个名为calculate.py
的python脚本,其中包含一个函数。
我想修改名为calculate.py
的python脚本,以便执行以下操作:
1)读取Energy\u vs\u volume.dat
文件
2)进行此计算:取Energy\u vs\u volume.dat
文件的第1列,即“volume”列,并将is作为变量V
的数据处理
3)我在calculate.py
脚本中定义了此函数:
E0=-180.00
B0=55
V0=120
B0_prime=20
def P(V):
f0=(3.0/2.0)*B0
f1=((V0/V)**(7.0/3.0))-((V0/V)**(5.0/3.0))
f2=((V0/V)**(2.0/3.0))-1
pressure= f0*f1*(1+(3.0/4.0)*(B0_prime-4)*f2)
return pressure
4)我需要将能量vs_体积.dat
文件(V的值)中第1列的值赋予函数,并创建另一个名为压力vs_体积.dat
的文件,该文件将包含:
# volume pressure
64 the calculated value
63 the calculated value
62 the calculated value
. .
. .
. .
5)然后我需要创建一个名为Energy\u vs\u pressure.dat的文件,该文件将包含:
# volume pressure
64 the calculated value
63 the calculated value
62 the calculated value
. .
. .
. .
5a)第一列:来自压力与体积.dat
文件的第二列数据
5b)第二列:来自Energy\u vs\u volume.dat
文件的第二列数据:
# pressure energy
the calculated value -180.001
the calculated value -180.002
the calculated value -180.005
. .
. .
. .
如果你能帮助我,我将不胜感激
编辑
如果能量vs_volume.dat
有第三列名为#velocity
:
# volume energy velocity
64 -180.001 25
63 -180.002 21
62 -180.005 22
. . .
. . .
. . .
我运行相同的脚本,但使用以下行:
volume,energy,velocity=[float(n)表示行中的n。split()]
它无法拆分,出现以下错误:
volume,energy,extra=[float(n)for n in line.split()]
ValueError:要解压缩的值太多
希望这是可以理解的
# open the files
volume_energy = open('Energy_vs_volume.dat')
volume_pressure = open('Pressure_vs_volume.dat', 'w') # w for writing
pressure_energy = open('Energy_vs_pressure.dat', 'w') # w for writing
# write first lines of your created files
# (still not sure about the exact formatting)
# \t is a tab, \n is a newline
volume_pressure.write('# volume\tpressure\n')
pressure_energy.write('# pressure\tenergy\n')
with open('Energy_vs_volume.dat') as energy_volume: # open the file
energy_volume.next() # skip the first line
for line in energy_volume: # iterate over the remaining lines
# split the lines (removes linebreaks, tabs and spaces)
# convert all items to floats, unpack the list into two variables
volume, energy = [float(n) for n in line.split()]
pressure = P(volume) # call your function
# write values to files
# (still not sure about the exact formatting)
volume_pressure.write('{}\t{}\n'.format(volume, pressure))
pressure_energy.write('{}\t{}\n'.format(pressure, energy))
# close files
volume_energy.close()
volume_pressure.close()
pressure_energy.close()
当能量与体积之比.dat
包含
# volume energy
64 -180.001
63 -180.002
62 -180.005
程序将创建一个文件Pressure\u vs\u volume.dat
,其中包含
# volume pressure
64.0 887.265477926
63.0 963.895750396
62.0 1047.46825523
# pressure energy
887.265477926 -180.001
963.895750396 -180.002
1047.46825523 -180.005
和一个文件能量vs_压力.dat
包含
# volume pressure
64.0 887.265477926
63.0 963.895750396
62.0 1047.46825523
# pressure energy
887.265477926 -180.001
963.895750396 -180.002
1047.46825523 -180.005
查看这些文件中的一行,是否有空格或制表符,以及这些空格或制表符在生成的文件中的数量和位置是否重要?@timakro+1,谢谢您的评论。这个故事从一个输入文件开始:Energy\u vs\u volume.dat
。正如文章中所述,这个文件由第一行组成,上面写着#体积能量
,从第二行开始,只有两列数字。查看此文件中的一行,第一列和第二列之间的分隔是一个选项卡。输出文件是:压力与体积.dat
和能量与压力.dat
。在这两种情况下,第一行应分别包含#体积压力
和#压力能量
。听起来您好像在要求我们为您做作业。阅读和书写文件都有很好的文档记录,互联网上可能有数百万个例子。你做了什么来尝试自己解决这个问题?如果你测试它,它会出现以下错误:volume,energy=[float(n)for n in line.split()]ValueError:需要超过0个值才能解包
我无法重现你的问题,它对我有效:。您的输入文件中可能有空行或其他不符合格式的行。+1非常感谢。一个小错误是它应该是格式(压力,能量)
而不是格式(能量,压力)
为了在能量vs_压力.dat
中第一列是要绘制的x数据,而不是y数据。我固定了能量vs_压力.dat中各列的顺序以及注释int
而不是float
line.split()
以字符串形式返回数字列表[number\u list中i的i+1]
在python中称为列表理解,此示例计算为一个列表,其中number\u list
的所有项都增加了1。最后,a,b,c=list_with_3_items
将list_with_3_items
中的第一项分配给a
,第二项分配给b
,依此类推。我认为我的答案现在是正确的,如果你没有看到更多的问题,请接受它。请在注释中自由询问有关代码的问题。修复了变量名。我不能重现你的新问题,它适合我。请注意,编辑功能应用于纠正错误和提高问题的可理解性,而不是更改其内容。我再次认为我的答案现在是正确的,如果你没有看到进一步的问题,请接受它。