对于我的项目,我从另一个程序中获取纯文本文件(report.txt).它全部以纯文本格式化.如果你在记事本中打开它,它看起来不错(就像纯文本文件一样).当我在Word中打开文件并显示段落时,我看到...用于空格,向后看P用于pararaph.
我需要将此文件转换为PDF并添加一些其他PDF页面以制作一个最终PDF.所有这些都发生在Python中.
我无法将report.txt转换为pdf.我有ReportLab,能够读取文件并进行一些更改(比如将文本更改为Courier),但间距会丢失.当文件被读取时,它似乎剥离任何额外的空格.
问题:a)是否有更简单的方法将report.txt转换为pdf?b)如果没有,当我读取文件时,有没有办法保留我的空间?c)或者我的段落样式中是否缺少一个可以保持原始外观的参数?
这是我的代码:
# ------------------------------------
# Styles
# ------------------------------------
styleSheet = getSampleStyleSheet()
mystyle = ParagraphStyle(name='normal',fontName='Courier',
fontSize=10,
alignment=TA_JUSTIFY,
leading=1.2*12,
parent=styleSheet['Normal'])
#=====================================================================================
model_report = 'report.txt'
# Create document for writing to pdf
doc = SimpleDocTemplate(str(pdfPath), \
rightMargin=40, leftMargin=40, \
topMargin=40, bottomMargin=25, \
pageSize=A4)
doc.pagesize = portrait(A4)
# Container for 'Flowable' objects
elements = []
# Open the model report
infile = file(model_report).read()
report_paragraphs = infile.split("\n")
for para in report_paragraphs:
para1 = '<font face="Courier" >%s</font>' % para
elements.append(Paragraph(para1, style=mystyle))
doc.build(elements)
Run Code Online (Sandbox Code Playgroud) 我正在组建一个复杂的管道,我想在程序输出中包含stderr以便记录,但我也希望错误保留在stderr上,这样我就能发现问题.
我发现这个问题询问如何将stdout + stderr指向一个文件并仍然在终端上获得stderr; 它很接近,但我不想将stdout重定向到一个文件:程序的输出将被其他脚本使用,所以我希望它保留在stdout上(对于stderr也是如此).所以,总结一下:
尽职调查:捕捉stderr很容易2>&1.通过管道输出可以轻松保存和查看标准输出tee.我也知道如何将stdout转移到文件并通过管道直接stderr:command 2>&1 1>fileA | tee fileB.但是如何复制stderr并将stdout放回fd 1?
在python 3中识别unicode私用字符的正确方法是什么?模块中没有明显的相关性unicodedata,这使得查找字符名称和属性变得容易.
一些背景:unicodedata.name(),它给出了unicode字符的名称,将ValueError使用私有使用字符(例如,try unicodedata.name("\uf026"))调用if .但是空白字符(空间本身除外)以及可能的其他东西也会触发异常.那么检测PUA字符的非hacky,可靠方法是什么?
应用程序可以在剪贴板上以多种格式提供文本,以造福于可能支持也可能不支持最丰富表示的消费者。为了弄清楚我的应用程序应该(和可能)使用什么,我想检查一些常见应用程序提供的格式。但是我如何获得这些格式的列表?
Microsoft 记录了 C++ 函数EnumClipboardFormats,它完全符合我的要求。我可以从 Java 访问此功能(或等效功能)吗?如何使用它?是否有独立于系统(或至少是 Linux 和 OS X)的对应版本?
更准确地说,我正在寻找一种方法来枚举剪贴板的内容,然后在剪贴板包含不同格式的富文本时获取内容,例如text/plain, text/html, text/rtf, 以及其中的任何其他内容。我不会处理诸如通过剪贴板移动的文件集合之类的奇特类型。我正在寻找适用于 Windows 和 OS X 以及希望适用于 Linux 的解决方案(或多个解决方案)。
尽职调查: 这个问题或多或少问了同样的问题,但没有(正确的)答案。我浏览了 java工具包的剪贴板相关功能awt,但它们似乎是围绕消费者能够使用的特定“风味”(格式)组织的——而不是围绕可用的。
我也问过如何在 python 中执行此操作,但是(在我自己研究了一段时间之后)我几乎得出结论,python 不提供对富文本格式的访问。
如果我有一(key, value)对配对,我可以快速初始化这样的字典:
>>> data = [ ('a', 1), ('b', 2) ]
>>> dict(data)
{'a': 1, 'b': 2}
Run Code Online (Sandbox Code Playgroud)
我想用Counter字典做同样的事; 但怎么样?构造函数和update()方法都将有序对视为键,而不是键值对:
>>> from collections import Counter
>>> Counter(data)
Counter({('a', 1): 1, ('b', 2): 1})
Run Code Online (Sandbox Code Playgroud)
我能管理的最好的就是使用一个临时字典,这个字典很丑陋而且不必要地迂回:
>>> Counter(dict(data))
Counter({'b': 2, 'a': 1})
Run Code Online (Sandbox Code Playgroud)
有没有一种正确的方法Counter从一(key, count)对配对中直接初始化?我的用例涉及从文件中读取大量已保存的计数(使用唯一键).
我经常编写函数,这些函数采用一个参数作为要操作的数据,一个或多个附加参数与操作规范。如果“规范”参数是可选的,则将它们放在强制性data参数之后是有意义的:
sort(data, key=..., reverse=True)
Run Code Online (Sandbox Code Playgroud)
但是假设两个参数(或其中几个)都是强制性的?re模块的函数将正则表达式(操作)放在字符串(要操作的数据)之前。当然,可选参数仍然排在最后。
re.search(r"[regexp]+", text, flags=re.I)
Run Code Online (Sandbox Code Playgroud)
所以这里的问题是:撇开可选参数不谈,是否有任何明确的约定(官方 PEP 或已建立的惯例)来根据其功能/目的对强制性参数进行排序?当我第一次学习 Python 时,我记得读过一些声称 Python 的一个优点是它有明确的约定,尤其是在这个特定事物上的声明。但我现在无法检索任何此类信息。
如果不清楚:我恳请您提供指向既定惯例或标准的指示,而不是关于哪种顺序是“最佳”的建议。
我正在使用Confluence REST api,并且想要提取一些文档。文档正文有多种格式:editor, storage, view, export_view, anonymous_export_view,... 但我没有在任何地方找到它们的描述,或者每个文件的用途。(这个答案提到了几种格式,但没有说明它们是什么。)在我的检查中,所有格式都嵌入了 HTML 样式的标记,但具有不同的非标准属性。任何指针?
具体来说,我正在寻找用于转换为其他非融合格式的最佳格式。
示例查询:
https://confuence.example.com/rest/api/content?spaceKey=doc&expand=body.editor,body.storage,body.anonymous_export_view,body.view,body.export_view&start=0&limit=50
Run Code Online (Sandbox Code Playgroud)
这将返回几种替代格式,我看到了许多看似随机的差异。那么故事是怎样的呢?
为"我无法让它工作"的问题提前道歉:我应该如何将.py文件加载到ipython笔记本中?我想将python代码转换为笔记本(第一个简单的脚本和后来的脚本,其中包含作为注释嵌入的nbconvert指令- 请参阅链接文件的底部.)
也许我做错了,但也许我的设置出了问题.当我将.py文件拖到Notebook的文件列表时,我收到了消息
文件类型无效:上载的笔记本必须是
.ipynb文件.
我甚至尝试将扩展名更改为.ipynb(保持python脚本不被修改); 合理的,我收到了一个错误:
加载笔记本时出错:错误请求
知道出了什么问题吗?
系统信息:我在OS X(10.8,Mountain Lion)上,使用Firefox 28.0和Anaconda 1.9.2(x86_64),它提供python 2.7.6和ipython 2.0.Anaconda不是默认的PATH; 我将它添加到一个bash会话中,然后从中启动笔记本ipython notebook,我可以.ipynb在浏览器中正常打开和编辑文件.
但我确实得到了一些奇怪的行为:
当从笔记本导出为.py文件时,我没有在这里记录控制注释,但是更简单的格式,没有版本号:
# coding: utf-8
# In[ ]:
print "This is a slide"
## Top-level title
### Second-level heading
#### Third-level heading
# This is some `markdown` text.
#
# And some more here.
Run Code Online (Sandbox Code Playgroud)
知道这里发生了什么吗?
生成相同的格式ipython nbconvert.但是,如果我启动笔记本服务器ipython notebook …
我想将 IPython 笔记本与一些 shell 命令及其输入放在一起。在 bash 提示中,我可以使用“here-document”语法:
bash-3.2$ mysql -u root <<END_IPUT
> use mydb;
> show tables;
> END_INPUT
Run Code Online (Sandbox Code Playgroud)
如何在 IPython 中获得相同的效果,特别是在 jupyter 笔记本中?我知道如何将 shell 命令作为 IPython 执行为“行魔术”或“单元魔术”,例如:
In [7]: !! ls -tF
Out[7]: ['Demo-notebook.ipynb',
'createdb.sql',
...
Run Code Online (Sandbox Code Playgroud)
我已经将IPython 视为一个系统 shell,它展示了如何启用一些语法细节。在以下之后,我可以运行系统命令而无需预先添加!或!!
# Turn everything in $PATH into an alias;
# then enable calling aliases without ! or %
%rehashx
%autocall 2
Run Code Online (Sandbox Code Playgroud)
但是这些都无助于为这些命令提供输入内联:here-document 语法在 IPython 中无效,并导致 python SyntaxError。那么我该怎么做呢?
我正在使用 Anaconda 发行版中的 Python 3,并尝试将简单的 Python 程序转换为 OS X 应用程序(在 El Capitan 上运行)。按照教程中的说明,我跑了
py2applet --make-setup my-script.py
python setup.py py2app -A
Run Code Online (Sandbox Code Playgroud)
一切正常,没有错误,但是当我尝试启动应用程序时,我收到以下错误消息:
我的脚本:无法(原文如此)定位 python 运行时。您可能需要安装 Python 的框架构建,或编辑此应用程序 Info.plist 文件中的 PyRuntimeLocations 数组。
我理解这意味着我应该添加 Anaconda 的 python 路径(它在我的 bash PATH 中,但启动器不知道)。但是,自动生成的应用程序Info.plist已经指向 Anaconda python 二进制文件:
<key>PythonInfoDict</key>
<dict>
<key>PythonExecutable</key>
<string>/Applications/Experimental/anaconda/bin/python</string>
...
Run Code Online (Sandbox Code Playgroud)
我不明白这里有什么要解决的。我已阅读这些相关问题:
第一个问题涉及相同的错误消息,并按照第二个问题中的建议解决。但据我了解,这些问题描述了相反的情况:OP 正在运行与操作系统一起分发的 python,并且想要分发他们的应用程序;解决方案是使用单独安装的python。我正在使用非系统 python,我还没有尝试分发任何东西。那么是什么导致了这里的问题,解决方案是什么?