首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用shlex保留连续的空格

使用shlex保留连续的空格
EN

Stack Overflow用户
提问于 2013-07-13 10:09:53
回答 2查看 423关注 0票数 1

我正在使用shlex解析csv文件,并且需要保留连续的空格字符,如下所示...

代码语言:javascript
复制
line = 'a, b, "c, z",,,d,e,f'
spltr = shlex.shlex(line)
spltr.whitespace += ','
parts = list(spltr)
print parts

当我真的需要['a', 'b', '"c, z"', '', '', 'd', 'e', 'f']时,它会返回['a', 'b', '"c, z"', 'd', 'e', 'f']。我如何告诉shlex保留这些连续的空格字符,而不是删除它们?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-07-13 11:24:52

这不适用于shlex,因为在命令行中,空白字符的数量是不相关的。

代码语言:javascript
复制
spltr.whitespace += ','

一个或多个空格之间没有区别,它们被作为一个单独的项处理。

以下是一个可行的解决方案:

  • 请将您的输入文件拆分为多行
  • 如果您喜欢,请将您的块发送到另一个进程使用
  • StringIO以便您可以在每个块上使用文件语义
  • 使用<代码>D11模块<代码>H212<代码>F213

工作示例:

代码语言:javascript
复制
>>> import csv
>>> import StringIO
>>>
>>> line = 'a, b, "c, z",,,d,e,f'
>>> file_like = StringIO.StringIO(line)
>>>
>>> csvreader = csv.reader(file_like, delimiter=',', quotechar='"', skipinitialspace=True)
>>> list(csvreader)
[['a', 'b', 'c, z', '', '', 'd', 'e', 'f']]
票数 1
EN

Stack Overflow用户

发布于 2013-07-13 11:22:31

您应该使用csv模块:

代码语言:javascript
复制
import csv
from cStringIO import StringIO

line = 'a, b, "c, z",,,d,e,f'
parts = next(csv.reader(StringIO(line), skipinitialspace=True))

请注意,这将删除输出中的引号:

代码语言:javascript
复制
['a', 'b', 'c, z', '', '', 'd', 'e', 'f']

这与你说的你想要的略有不同,但希望没什么大不了的(也许这样更好?)。

现在,您还说您关心性能和多核解析。因此,我建议您进行流式读取,而不是像上面的示例那样使用StringIO进行缓冲。您可以打开每个进程中的文件,file.seek()到适当的位置,并从那里读取,当文件位置到达特定进程的末尾时停止。

或者,如果您想在单个进程中获得高性能,可以看看NumPy,如果CSV文件是矩形的,那么它可以高效地读取CSV文件(每行都有相同数量的列,具有相同的数据类型)。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17626318

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档