Ash*_*Ash 4 python file-io seek python-3.x
我在目录中有一个名为 fName.txt 的文件。运行以下 python 代码段(来自模拟)将通过执行循环(包含代码段)三次将 6 个数字添加到文本文件中的 3 行和 2 列中。但是,我想在将新数据写入文件之前完全清空文件。(否则多次运行脚本会产生模拟所需的三行以上,这会产生无意义的结果;换句话说,脚本只需要看到模拟产生的三行)。我遇到了以下页面如何仅删除 python 中文件的内容,其中解释了如何执行此操作,但我无法将其实现到我的示例中。特别是,经过pass语句,我不确定语句的顺序,因为我的文件一开始是关闭的,并且一旦print执行语句就必须再次关闭。每次,我都会收到不同的错误消息,无论如何我都无法避免。这是我收到的一种错误,表明内容已被删除(很可能在打印语句之后):
/usr/lib/python3.4/site-packages/numpy/lib/npyio.py:1385: UserWarning: genfromtxt: 空输入文件: "output/Images/MW_Size/covering_fractions.txt" warnings.warn('genfromtxt: Empty输入文件:“%s”' % fname)回溯(最近一次调用):文件“Collector2.py”,第 81 行,在 LLS 中,DLAs = np.genfromtxt(r'output/Images/MW_Size/covering_fractions.txt' , comments='#', usecols = (0,1), unpack=True) ValueError: 需要 0 个以上的值来解包
这就是为什么我决定以最简单的形式保留代码段而不使用该页面中的任何建议:
covering_fraction_data = "output/Images/MW_Size/covering_fractions.txt"
with open(covering_fraction_data,"mode") as fName:
print('{:.2e} {:.2e}'.format(lls_number/grid_number, dla_number/grid_number), file=fName)
fName.close()
Run Code Online (Sandbox Code Playgroud)
每次运行模拟都会生成 3 行,应将其打印到文件中。当mode是 'a' 时,将生成的三行添加到现有文件中,生成一个包含三行以上的文本文件,因为它已经包含了一些内容。将'a'改为'w'后,文本文件中不是打印了3行,而是只打印了1行;前两行被意外删除。
解决方法:
避免这一切的唯一方法是选择“a”mode并在运行代码之前手动删除文件的内容。这样,在运行代码后,文本文件中只生成了三行,这是预期的输出。
题:
所以,我的问题基本上是,“我怎么能修改上面的代码进行实际的文件删除自动和之前它充满了三个新行?”
非常感谢您的帮助。
您正在使用“追加”模式 ( 'a') 打开您的文件。指定此模式后,新文本将附加到现有文件内容。您正在寻找“写入”模式,即open(filename, 'w'). 这将在您每次打开文件时覆盖文件内容。