Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/340.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/20.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_Django_Text_File Io - Fatal编程技术网

Python 如何返回具有精确位置的文本文件?

Python 如何返回具有精确位置的文本文件?,python,django,text,file-io,Python,Django,Text,File Io,我正在用Django创建一个文本文件响应。我用一个模板文件来实现它 def create_file(request): ... create context ... result = render_to_string('template.txt', context_dict) response = HttpResponse(result, mimetype='text/plain') response['Content-Disposition'] = 'atta

我正在用Django创建一个文本文件响应。我用一个模板文件来实现它

def create_file(request):
    ... create context ...

    result = render_to_string('template.txt', context_dict)
    response = HttpResponse(result, mimetype='text/plain')
    response['Content-Disposition'] = 'attachment; filename=file.txt'
    return response
但是文本文件响应是唯一的,因为文件中的每个字符都必须精确定位。因此,文件中的每个字符(包括空格)都是故意放置的。这对于带有未指定长度的变量的行来说是一个问题。假设我们有两个变量,它们是字符串,并且在模板中位于同一行

{{variable1}}   {{variable2}}

和variable2必须出现在文本文件的第5列中。如果我不知道variable1占用了多少空间,如何为variable2指定一个精确的位置?或者,我完全错了吗?完全抛弃模板并在视图中创建文本响应是否更容易?

是的,完全在视图中创建响应更容易。模板只是一个方便的插件,用于使用静态支架呈现结构化文本,但在我看来,您的结构似乎在布局中,而不是支架中


事实上,我会通过创建自己的小模板引擎来处理这一特殊情况。Django有很多这样做的例子,可以输出CSV、PDF,甚至是Django应用程序生成的图像。

正如您所建议的,我会在视图中这样做

对于您给出的示例,可以使用左对齐字符串,根据需要填充空格

>>> from string import ljust
>>> variable1 = "v1"
>>> variable2 = "v2"
>>> ljust(variable1, 4)
'v1  '
>>> line = "%s%s" % (ljust(variable1, 4), variable2)
'v1  v2'
或者,正如Elf和ΖΖΖΖΖΖΖΥ在评论中指出的那样,您可以使用
%-格式设置

>>> from string import ljust
>>> variable1 = "v1"
>>> variable2 = "v2"
>>> line = "%-4s%s" % (variable1, variable2)
'v1  v2'
使用
.4
变量1
截断为4个字符:

>>> variable1 = "12345"
>>> variable2 = "v2"
>>> line = "%-4s.4%s" % (variable1, variable2)
'v1  v2'
(即将过时)
sprintf
-like
%
格式具有以下功能:

 "%6.6s" % variable # right-justify at most 6 characters prefixing spaces as needed
 "%-6.6s" % variable # left-justify at most 6 characters appending spaces as needed
 "%-*.*s" % (width, width, variable) # left-justify at most width characters

但是,我不知道您的模板机制是如何实现的,它是否可以使用
%
格式。

正确的对齐更容易。(%06s“%variable1”)将在字符串的左侧放置6-len空格。(不过,如果需要的话,它不会被截断为6个字符。)感谢您的回复。使用ljust看起来比使用模板更有希望。现在我需要考虑一个代码结构来处理我正在创建的行的每种情况(确切地说是62:-()不管怎样,你都必须这样做,不是吗?即使模板做了你想要的,你仍然必须精确地描述每一行,就像网页精确地描述每个DIV、SPAN和TABLE/TR/TD一样。描述结构,然后编写代码将其与数据合并。然后编写代码使结构可插入.Oh当然。事实上,这种方法会更简单,因为我可以用循环来实现它,而不是显式地布置每一行。@Elf:要左对齐最多6个字符,您需要
“%-6.6s”%variable
),而要右对齐,您需要
“%6.6s”%variable
)。“%06s”用零填充。