将数组行附加到 Python 中的 .txt 文件 3
Appending array rows to .txt file in Python 3
我只是想将我的 11 列单行值放入一个文本文件中,我可以在其中追加新行。我习惯了 python 2.7,但我不明白为什么我的 np.savetxt
的行为与以前不同。
我知道这将创建我的文本文件而不会出现任何类型错误:
with open("testtext.txt", "wb") as myfile:
np.savetxt(myfile, mydata, fmt="%.5f", delimiter=' ', newline=' ')
然而,当我 运行 我的代码接收我需要附加的新数据时,我将其更改为:
with open("testtext.txt", "ab") as myfile:
np.savetxt(myfile, mynewdata, fmt="%.5f", delimiter=' ', newline=' ')
它不会将 mynewdata
放入新行。我在换行符中输入了 \n
,我试过 " "
而不是 ' '
,我试过 \r\n
但那是不可能的。请帮忙,我觉得应该这样做一件简单的事。谢谢。
再问一遍你的问题,所以,如果你的新数组(行)不是从新行开始的,那应该是你的文本文件的最后一行没有以换行符结尾。正如@hpaulj 指出的那样,这应该有效:
with open("testtext.txt", "wb") as myfile:
f.write(b'\n')
...
如果您在 windows 上 运行,请使用“\r\n”而不是“\n”。
如果您保存一个带有典型分隔符且没有特殊换行符的一维数组,它每行保存一个值:
In [548]: with open('test.txt','wb') as f:
...: np.savetxt(f, np.arange(3), fmt='%5d', delimiter=',')
In [549]: cat test.txt
0
1
2
使用 '' 换行符,将它们放在一行上 - 但文件结束时没有 \n
In [550]: with open('test.txt','wb') as f:
...: np.savetxt(f, np.arange(3), fmt='%5d', delimiter=',', newline='')
In [552]: cat test.txt
0 1 2In [553]:
下一个追加将在该行继续。
我可以写一篇 b'\n'
。这需要是字节串 nl。 (np.savetxt
自由使用 np.lib.npyio.asbytes
)。
In [557]: with open('test.txt','ab') as f:
...: f.write(b'\n')
...: np.savetxt(f, np.arange(3), fmt='%5d', delimiter=',', newline='')
In [558]: cat test.txt
0 1 2
0 1 2In [559]:
或者我应该养成在这样的 savetxt
.
末尾添加 \n
的习惯
或者,我可以确保将二维数组写入文件,即使我只想写入一行。将数组包装在列表中就可以了。想想 savetxt
在输入的 'rows'(第一维)上迭代,一次写一行(用 fmt
、定界符和换行符格式化)。
In [559]: with open('test.txt','wb') as f:
...: np.savetxt(f, [np.arange(3)], fmt='%5d', delimiter=',')
In [560]: cat test.txt
0, 1, 2
In [561]: with open('test.txt','ab') as f:
...: np.savetxt(f, [np.arange(4)], fmt='%5d', delimiter=',')
In [562]: cat test.txt
0, 1, 2
0, 1, 2, 3
我只是想将我的 11 列单行值放入一个文本文件中,我可以在其中追加新行。我习惯了 python 2.7,但我不明白为什么我的 np.savetxt
的行为与以前不同。
我知道这将创建我的文本文件而不会出现任何类型错误:
with open("testtext.txt", "wb") as myfile:
np.savetxt(myfile, mydata, fmt="%.5f", delimiter=' ', newline=' ')
然而,当我 运行 我的代码接收我需要附加的新数据时,我将其更改为:
with open("testtext.txt", "ab") as myfile:
np.savetxt(myfile, mynewdata, fmt="%.5f", delimiter=' ', newline=' ')
它不会将 mynewdata
放入新行。我在换行符中输入了 \n
,我试过 " "
而不是 ' '
,我试过 \r\n
但那是不可能的。请帮忙,我觉得应该这样做一件简单的事。谢谢。
再问一遍你的问题,所以,如果你的新数组(行)不是从新行开始的,那应该是你的文本文件的最后一行没有以换行符结尾。正如@hpaulj 指出的那样,这应该有效:
with open("testtext.txt", "wb") as myfile:
f.write(b'\n')
...
如果您在 windows 上 运行,请使用“\r\n”而不是“\n”。
如果您保存一个带有典型分隔符且没有特殊换行符的一维数组,它每行保存一个值:
In [548]: with open('test.txt','wb') as f:
...: np.savetxt(f, np.arange(3), fmt='%5d', delimiter=',')
In [549]: cat test.txt
0
1
2
使用 '' 换行符,将它们放在一行上 - 但文件结束时没有 \n
In [550]: with open('test.txt','wb') as f:
...: np.savetxt(f, np.arange(3), fmt='%5d', delimiter=',', newline='')
In [552]: cat test.txt
0 1 2In [553]:
下一个追加将在该行继续。
我可以写一篇 b'\n'
。这需要是字节串 nl。 (np.savetxt
自由使用 np.lib.npyio.asbytes
)。
In [557]: with open('test.txt','ab') as f:
...: f.write(b'\n')
...: np.savetxt(f, np.arange(3), fmt='%5d', delimiter=',', newline='')
In [558]: cat test.txt
0 1 2
0 1 2In [559]:
或者我应该养成在这样的 savetxt
.
\n
的习惯
或者,我可以确保将二维数组写入文件,即使我只想写入一行。将数组包装在列表中就可以了。想想 savetxt
在输入的 'rows'(第一维)上迭代,一次写一行(用 fmt
、定界符和换行符格式化)。
In [559]: with open('test.txt','wb') as f:
...: np.savetxt(f, [np.arange(3)], fmt='%5d', delimiter=',')
In [560]: cat test.txt
0, 1, 2
In [561]: with open('test.txt','ab') as f:
...: np.savetxt(f, [np.arange(4)], fmt='%5d', delimiter=',')
In [562]: cat test.txt
0, 1, 2
0, 1, 2, 3