为numpy.savetxt设置路径 - 文件名包含循环变量

时间:2013-06-18 15:02:34

标签: python for-loop path save

我正在尝试将名称更改的文件保存到与脚本不同的文件夹中:

save_field( './cycle_1_580-846/txt/"frame_" + str( 580 + j ) + "_to_" + str( 581 + j ) + ".txt"', "Data68_0" + str( 580 + j ) + ".tif", str( 580 + j ) + "_to_" + str( 581 + j ), scale = 1500, width = 0.0025)

现在,为了保存带有循环变量的文件名,我跟着this post

我天真地认为使用'和'会解决问题,但是,如果我这样做,我会在文件夹中找到一个文件,但是错误的名称(在这种情况下:“frame_”+ str(580 + j)+“ to ”+ str(581 + j)+“。txt”(我希望:frame_580_to_581.txt)。如果我没有设置路径,我没有问题。

有一种聪明的方法可以解决这个问题吗?

干杯!

编辑 j只是一定范围的文件(在这种情况下,它是从0到270,递增1)

也许这也会有所帮助

def save_field( filename, background, new_file, **kw):
""" Saves quiver plot of the data stored in the file
Parameters
----------
filename : string
the absolute path of the text file
background : string
the absolute path of the background image file
new_file : string
the name and format of the new file (png preferred)

Key arguments : (additional parameters, optional)
*scale*: [None | float]
*width*: [None | float]
"""

a = np.loadtxt(filename)
pl.figure()
bg = mpimg.imread(background)
imgplot = pl.imshow(bg, origin = 'lower', cmap = cmps.gray)
pl.hold(True)
invalid = a[:,3].astype('bool')

valid = ~invalid
pl.quiver(a[invalid,0],a[invalid,1],a[invalid,2],a[invalid,3],color='r',**kw)
pl.quiver(a[valid,0],a[valid,1],a[valid,2],a[valid,3],color='r',**kw)
v = [0, 256, 0, 126]
axis(v)
pl.draw()
pl.savefig(new_file, bbox_inches='tight')

1 个答案:

答案 0 :(得分:0)

我不确定你的例子中有什么“j”...但是我会做出一些隐含的假设并从那里向前推进(也就是看起来你正试图建立一个增量)。

尝试以下方法:

save_path = "./cycle_1_580-846/txt/frame_" 
save_file = (str(580) + "_to_" + str(581) + ".txt")
save_other_file = ("Data68_0" + str(580) + ".tif")

save_field((save_path + save_file), , save_other_file, (str(580) + "_to_" + str(581)), scale = 1500, width = 0.0025)

我推荐上面的内容 - 有一些封装,对我来说更容易阅读,我甚至会更进一步清理save_field()...但我不是知道它做了什么,我不想承担太多。

您遇到的真正问题,并且您继续使用所拥有的内容,就是您将单引号与双引号错误地混合在一起。

sampleText = 'This is my "double quote" example'
sampleTextAgain = "This is my 'single quote' example"

这两个都有效。

但是,你所拥有的是:

sampleBadText = '"I want to have some stuff added" + 580 + "together"'

单引号包装基本上将ENTIRE行转换为字符串。所以,是的,难怪为什么你的文件被命名为它的方式。您需要在适当的位置使用单引号/双引号终止字符串,然后跳回到python内置/变量名称,然后返回到字符串以便连续strings + variables + {{1 }}

没有为你完成所有工作,这就是它的样子:

strings

注意我是如何调整单/双引号的,这样“字符串文字”包含在单引号或双引号中,然后我正确终止字符串文字和concat(通过save_field( './cycle_1_580-846/txt/frame_' + str( 580 + j ) + '_to_' + str( 581 + j ) + '.txt', [...] )变量/整数/附加字符串......

希望这是有道理的,但是你可以花很长时间来清理你所避免的这种混乱。

最终,如果你能看起来像:

+

这更清洁,更具可读性。但是,我再次没有花时间研究save_field的作用以及它接受的save_field(_file_name, _other_file_name, other_arg, scale=1500, width=0.0025) args,所以我不知道kwargs_file_name,而且_other_file_name甚至是有道理的例子,我只是希望他们这样做!