Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sql-server-2005/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python:读取和写入文件,并使用函数修改它们_Python_Function_File Io - Fatal编程技术网

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
,依此类推。我认为我的答案现在是正确的,如果你没有看到更多的问题,请接受它。请在注释中自由询问有关代码的问题。修复了变量名。我不能重现你的新问题,它适合我。请注意,编辑功能应用于纠正错误和提高问题的可理解性,而不是更改其内容。我再次认为我的答案现在是正确的,如果你没有看到进一步的问题,请接受它。