小编ale*_*xis的帖子

在Python中将纯文本转换为PDF

对于我的项目,我从另一个程序中获取纯文本文件(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)

python text reportlab

5
推荐指数
2
解决办法
2万
查看次数

如何将错误输出重定向到stdout和stderr?

我正在组建一个复杂的管道,我想在程序输出中包含stderr以便记录,但我也希望错误保留在stderr上,这样我就能发现问题.

我发现这个问题询问如何将stdout + stderr指向一个文件并仍然在终端上获得stderr; 它很接近,但我不想将stdout重定向到一个文件:程序的输出将被其他脚本使用,所以我希望它保留在stdout上(对于stderr也是如此).所以,总结一下:

  • 脚本生成fd 1中的输出,fd 2中的错误.
  • 我希望调用程序重新排列事物,以便输出+错误出现在fd 1中,错误出现在fd 2中.
  • 此外,错误应与输出交错(尽可能与自己的缓冲允许),而不是保存并在最后添加.

尽职调查:捕捉stderr很容易2>&1.通过管道输出可以轻松保存和查看标准输出tee.我也知道如何将stdout转移到文件并通过管道直接stderr:command 2>&1 1>fileA | tee fileB.但是如何复制stderr并将stdout放回fd 1?

bash io-redirection

5
推荐指数
1
解决办法
447
查看次数

使用python检测unicode私有区域字符

在python 3中识别unicode私用字符的正确方法是什么?模块中没有明显的相关性unicodedata,这使得查找字符名称和属性变得容易.

一些背景:unicodedata.name(),它给出了unicode字符的名称,将ValueError使用私有使用字符(例如,try unicodedata.name("\uf026"))调用if .但是空白字符(空间本身除外)以及可能的其他东西也会触发异常.那么检测PUA字符的非hacky,可靠方法是什么?

python unicode python-3.x

5
推荐指数
1
解决办法
486
查看次数

枚举剪贴板上可用的剪贴板格式

应用程序可以在剪贴板上以多种格式提供文本,以造福于可能支持也可能不支持最丰富表示的消费者。为了弄清楚我的应用程序应该(和可能)使用什么,我想检查一些常见应用程序提供的格式。但是我如何获得这些格式的列表?

Microsoft 记录了 C++ 函数EnumClipboardFormats,它完全符合我的要求。我可以从 Java 访问此功能(或等效功能)吗?如何使用它?是否有独立于系统(或至少是 Linux 和 OS X)的对应版本?

更准确地说,我正在寻找一种方法来枚举剪贴板的内容,然后在剪贴板包含不同格式的富文本时获取内容,例如text/plain, text/html, text/rtf, 以及其中的任何其他内容。我不会处理诸如通过剪贴板移动的文件集合之类的奇特类型。我正在寻找适用于 Windows 和 OS X 以及希望适用于 Linux 的解决方案(或多个解决方案)。

尽职调查: 这个问题或多或少问了同样的问题,但没有(正确的)答案。我浏览了 java工具包的剪贴板相关功能awt,但它们似乎是围绕消费者能够使用的特定“风味”(格式)组织的——而不是围绕可用的。

我也问过如何在 python 中执行此操作,但是(在我自己研究了一段时间之后)我几乎得出结论,python 不提供对富文本格式的访问。

java clipboard

5
推荐指数
0
解决办法
102
查看次数

如何从键/初始计数对列表中初始化计数器?

如果我有一(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)对配对中直接初始化?我的用例涉及从文件中读取大量已保存的计数(使用唯一键).

python counter data-structures python-3.x python-internals

5
推荐指数
1
解决办法
3062
查看次数

Python 中函数参数顺序的最佳实践

我经常编写函数,这些函数采用一个参数作为要操作的数据,一个或多个附加参数与操作规范。如果“规范”参数是可选的,则将它们放在强制性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 的一个优点是它有明确的约定,尤其是在这个特定事物上的声明。但我现在无法检索任何此类信息。

如果不清楚:我恳请您提供指向既定惯例或标准的指示,而不是关于哪种顺序是“最佳”的建议。

python

5
推荐指数
1
解决办法
422
查看次数

各种 Confluence 文档格式有何不同?

我正在使用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)

这将返回几种替代格式,我看到了许多看似随机的差异。那么故事是怎样的呢?

confluence confluence-rest-api

5
推荐指数
1
解决办法
886
查看次数

无法将.py文件导入ipython notebook

为"我无法让它工作"的问题提前道歉:我应该如何将.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-notebook

4
推荐指数
2
解决办法
2万
查看次数

如何为 IPython(笔记本)shell 命令提供内联输入?

我想将 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。那么我该怎么做呢?

ipython ipython-notebook ipython-magic jupyter-notebook

4
推荐指数
2
解决办法
5388
查看次数

如何将 py2app 与 Anaconda python 一起使用?

我正在使用 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,我还没有尝试分发任何东西。那么是什么导致了这里的问题,解决方案是什么?

python macos py2app anaconda

4
推荐指数
1
解决办法
4765
查看次数