小编xph*_*xph的帖子

以块的形式读取文件 - 使用RAM,从二进制文件读取字符串

我想了解在python中读取大文件时这种方法的RAM使用的差异.

版本1,在stackoverflow上找到:

def read_in_chunks(file_object, chunk_size=1024):
    while True:
        data = file_object.read(chunk_size)
        if not data:
            break
        yield data


f = open(file, 'rb')
for piece in read_in_chunks(f):
    process_data(piece)          
f.close()
Run Code Online (Sandbox Code Playgroud)

版本2,我在找到上面的代码之前使用了这个:

f = open(file, 'rb')
while True:
    piece = f.read(1024)      
    process_data(piece)        
f.close()
Run Code Online (Sandbox Code Playgroud)

在两个版本中都部分读取该文件.并且可以处理当前的部分.在第二个例子中,piece每个周期都有新的内容,所以我认为这样做不会将完整的文件加载到内存中.

但我真的不明白是什么yield,我很确定我在这里弄错了.有谁可以向我解释一下?


除了使用的方法之外,还有一些令我困惑的事情:

我读取的作品的内容由上面示例中的1KB的块大小定义.但是......如果我需要在文件中查找字符串怎么办?有点像"ThisIsTheStringILikeToFind"

根据String发生在文件中的位置,可能是一件包含该部件"ThisIsTheStr"- 而下一件将包含该部件"ingILikeToFind".使用这种方法,不可能在任何一块中检测整个字符串.

有没有办法以块的形式读取文件 - 但不知何故关心这些字符串?

欢迎任何帮助或想法,

映入眼帘!

python string ram

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

Python,Windows,Ansi - 再次编码

你好,

即使我真的尝试过......我对Python,Windows,Ansi字符编码感到困惑和有点绝望.我需要帮助,认真地......在网上搜索最近几个小时没有任何帮助,它只会让我发疯.

我是Python的新手,所以我几乎不知道发生了什么.我即将学习这门语言,所以我的第一个程序,几乎已经完成,应该从包含mp3的给定文件夹中自动生成音乐播放列表.除了一个问题之外,这很好用......

...我不能将Umlaute (äöü)写入播放列表文件.

在我找到了"错误编码"数据的解决方案后,i sys.argv能够处理这个问题.当从MP3中读取元数据时,我正在使用某种简单的字符替换来摆脱所有那些国际特殊字符,例如法语口音或这个带有斜线的疯狂的斯堪的纳维亚语"o" (我甚至不知道如何输入它...).一切都很好.

但是我想把至少提到的Umlaute写到播放列表文件中,这些字符在德国真的很常见.与元数据不同,我不关心一些丢失的字符或拼写错误的单词,这是相关的 - 因为现在我正在编写文件的路径.

我已经尝试了很多种编码和解码方法,我不能在这里列出所有这些...哎呀,我甚至无法分辨出我半小时前试过的设置.我在网上,这里和其他地方找到了代码,它似乎可以用于某些目的.不是我的.

我认为棘手的部分是这样的:似乎问题是我需要编写的文件的Ansi调用格式.正确 - 我实际上需要这个安西的东西.大约两个小时前,我实际上设法写了我想要的任何UFT-8文件.像魅力一样工作...直到我意识到我的播放器(Winamp,旧版本)不能用于那些UTF-8播放列表文件.它无法解析Path,即使它在我的编辑器中看起来正确.

如果我将文件格式更改回Ansi,则包含特殊字符的路径会损坏.我只是猜测,但如果Winamp将这个UTF-8文件读作Ansi,那么这将导致我现在遇到的问题.

所以...

  1. 我必须在路径上写äöü,否则它将无法工作
  2. 它必须是ANSI"编码"文件,否则它将无法工作
  3. line.write(str.decode('utf-8'))打破文件的功能一样
  4. 在脚本开头的一个神奇的评论在# -*- coding: iso-8859-1 -*-这里什么都不做(尽管它对提到的元数据和允许的字符有帮助...)
  5. 哦,我正在使用Python 2.7.3.第三方模块依赖,你知道......

是否有任何人可以指导我走出这种编码地狱的方法?欢迎任何帮助.如果我需要500行代码用于其他函数或类,我将键入它们.如果有一个处理这些东西的模块,请告诉我!我买了!任何有用的东西都会被测试.

感谢您的阅读,感谢您的任何评论,

映入眼帘!

python windows ansi character-encoding

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

打印文件并配置打印机设置

我正在尝试使用Windows上的Python编写打印机自动化代码,但无法完成.

我不是真的理解这个话题而且我有点惊讶 - 一个"简单"的方法来完成这个似乎并不存在......?有这么多的API允许以一种简单易用的方式访问常见的东西,但打印似乎是"特殊的"......?

 

这是我拥有的和我想做的事情:

  • 有一个PDF文件.PDF已经存在,我不想创建PDF或任何其他文件类型.我想打印这个PDF文件.一次一个文件.

  • 该文件可以是横向和纵向布局.该文件可以具有以下尺寸之一:A4,A3,A2,A1和A0.

  • 我喜欢使用普通的"物理"打印机打印文件.打印机是网络设备,使用其IP连接.有各种网络打印机,我希望能够使用多个网络打印机.有些只是小型A4打印机,有些是大型办公设备(一体式扫描,复印,打印......) - 而且还有大型绘图仪(最高为A0尺寸的纸张).

  • 我想编码:"在此打印机上打印此PDF文件".

  • 我喜欢配置打印尺寸.我想以原始尺寸"原样"打印PDF - 但我希望能够在小尺寸纸张上打印大格式.就像,PDF本身是A0尺寸,但我想在A3纸上打印.或者原始PDF大小为A2,我想在A4上打印.

  • 我想在Windows 7计算机(SP1,64bit)上使用它.我正在尝试在python中编写代码.我正在使用python 2.7,因为我正在使用python 3中没有的一些第三方模块.通常,欢迎通过python脚本触发的每个工作解决方案.

 

对我来说,这似乎不是一项非常"复杂"的任务."手动"操作非常简单直接 - 选择文档,开始打印,选择打印机,选择纸张尺寸 - 然后打印.

通过代码执行此操作似乎相当困难.这是我到现在为止所遇到的.

  • 有各种程序可用于命令行打印,程序如"Acrobat Reader","Foxit Reader"或类似程序.虽然使用这些程序提供的命令进行打印非常完美,但无法访问打印机设置来配置纸张尺寸.

  • 有特殊的命令行打印工具,但我找不到任何有用的免费软件.我尝试过"VeryPDF"命令行工具,但在纸张尺寸方面遇到了一些问题.虽然完全支持各种字母格式和各种其他东西,但我不需要支持(A4到A0)纸张尺寸.有A4和A3的预设,这些工作.该工具可以选择通过传递测量值(以/ pt/mm为单位)来使用自定义纸张尺寸 - 但是这不能像示例所示那样工作,使用此方法时它始终打印到A4.

  • 我找到了python的win32-package,包括win32print.我不明白这件事.API提供查找,添加或删除打印机,列出打印机队列,启动和停止打印机作业等功能 - 但不是简单的打印文件的可能性.似乎这个API可用于通过python编码创建打印数据来添加打印机作业,将某些文本和/或图形推送到类似"文件"的内容并将其发送到打印机.以打印机已经理解的格式.

 

当使用这个win32print模块时,我无法让它正常工作.这是我试图使用的exmple片段:

from win32print import *
printer = GetDefaultPrinterW()
handle = OpenPrinter(printer)
info = GetPrinter(handle, 2)
cap = DeviceCapabilities(info['pPrinterName'], info['pPortName'], DC_PAPERS)
ClosePrinter(handle)
Run Code Online (Sandbox Code Playgroud)

......如下所述:

http://timgolden.me.uk/pywin32-docs/win32print__DeviceCapabilities_meth.html

但那只是回归:

NameError: name 'DC_PAPERS' is not defined
Run Code Online (Sandbox Code Playgroud)

每当我尝试使用需要传递此类常量的函数时,就会发生这种情况.在我的系统上没有定义单个常量,我不知道为什么.

但我不知道即使在正常工作时我是否可以使用此API,所有使用示例仅显示如何将文本字符串发送到打印机.这不是我需要的,这不是我想知道的.

 

是否有任何可行的解决方案来打印文件并以简单直接的方式设置打印尺寸?

欢迎提出想法和提示!

python printing pdf command-line

6
推荐指数
1
解决办法
5225
查看次数

Python PPTX:获取表格边框颜色

我已经设法使用python-pptx读取 Python 中现有的 .pptx 文件,并且可以访问 powerpoint 幻灯片中的表格。

我失败的是:获取单元格的边框颜色。

我想根据表格边框颜色在表格单元格中插入数据,例如在具有绿色边框的表格单元格中插入“111”,在具有红色边框的单元格中插入“222”。

插入值是可行的,但如果不检查表格(或单元格)边框颜色,数据最终会出现在错误的位置。

一张ppt幻灯片上不止一张表格。这些表格均具有独特的边框颜色,例如,一张表格周围有实心绿色边框,另一张表格是全绿色的,另一张表格是蓝色的,等等。

这就是我迭代页表和访问单元格的方式:

from pptx import Presentation

pptx_file = r"my_file_here"
with open(pptx_file, "rb") as pptx:
    prs = Presentation(pptx)
    for slide in prs.slides:
        for shape in slide.shapes:
            if not shape.has_table:
                continue
            table = shape.table

            my_input_field = table.cell(0, 1)
Run Code Online (Sandbox Code Playgroud)

my_input_field我想根据颜色插入,但不知道如何获取/检查/读取它的边框颜色?

恐怕我太愚蠢了,无法处理那里的信息,这对我没有帮助: https: //python-pptx.readthedocs.io/en/latest/api/dml.html#pptx.dml.color。颜色格式

有人能指出我正确的方向吗?

编辑:

我很确定有一种方法可以访问颜色。文档指出

细胞

单元格具有背景填充、边框、边距和其他几个可以逐个单元格自定义的格式设置。

但我不知道如何访问这个属性。我已经查看了设置颜色的代码片段,但我无法从这个示例中理解任何意义。

编辑2:我的解决方法

我仍然没有解决方案,但万一有人偶然发现这一点 - 这是我的小解决方法:我将表格的颜色名称作为文本放在表格本身中。

迭代所有表时,我从表中读取此文本并将其删除。这样我就可以区分表格并添加正确的信息。

这不是很好,但是很有效。

python powerpoint python-pptx

0
推荐指数
1
解决办法
2465
查看次数