【问题标题】:Python CSV module, special split stringPython CSV 模块,特殊拆分字符串
【发布时间】:2018-01-25 13:30:56
【问题描述】:

我遇到了一个独特的问题。 我有代码:

with open("test.csv", "r") as csvFile:
reader = csv.reader(csvFile, skipinitialspace=True)
for row in reader:
    for obj in row:
        print(obj)

示例 csv 文件:

anotherCommand, e=5, f=6, g=7, h=9, test="aaa, bbb, ggggg"

我想用这种方式分割这个字符串:

anotherCommand
e=5
f=6
g=7
h=9
test="aaa, bbb, ggggg"

但是我呈现的代码以这种方式拆分这些字符串:

anotherCommand
e=5
f=6
g=7
h=9
test="aaa
bbb
ggggg"

这是错误的解决这个问题。 我看到了这样的话题: Why is the Python CSV reader ignoring double-quoted fields? 要么 How can i parse a comma delimited string into a list (caveat)?

但是这个例子是不同的,这些例子没有出乎我的意料。 有人有想法吗?

【问题讨论】:

  • @cᴏʟᴅsᴘᴇᴇᴅ 不起作用,与链接网站中的情况相同:)
  • 你能补充一些细节吗?你到底做了什么,没用。
  • 我写道:with open("test.csv", "r") as csvFile: for line in csv.reader(csvFile, quotechar='"', delimiter=',', quoting= csv.QUOTE_ALL, skipinitialspace=True): print(len(line)) ---- 我仍然得到与我的主要答案中相同的值
  • 我将我的代码建模为您链接的答案:)
  • 问题的关键是您的“csv”不是格式正确的 CSV 文件。如果您可以生成它使其有效,那么 python csv 解析将起作用。对于您的示例,您似乎需要在 test="aaa, bbb, ggggg" 周围添加引号,因此它看起来像“test="aaa, bbb, ggggg"”,但您可能只需在每个值周围添加引号即可。

标签: python string csv


【解决方案1】:

你可以在这里使用shlex.split

import shlex

with open('test.csv') as fin:
    for line in fin:
        row = [col.rstrip(',') for col in shlex.split(line)]
        print(*row, sep='\n')

【讨论】:

  • 好人!作品!你能解释一下你的解决方案吗?或者链接网站,我应该去学习吗?
  • 这是一个优势,我打算在进一步的文件处理中删除它们
  • @Robert 关于引用 - 查看shlex 模块的文档 - 它尝试像在将命令行参数传递给程序时一样解析文本......(这是你的线条在我看来比实际的 CSV 数据更像 - 所以只是想我会试一试,看看它是否产生了适用于你的用例的东西,它主要是减去保留尾随逗号 - 因此 str.rsplit 那里)...
  • 这是一个不同格式的输出,是在csv上设计的。
  • @Robert 如果您执行 values = dict(col.partition('=')[::2] for col in row) 以获得要使用的键/值的 dict 可能会有意义,如果这适用于您想要使用它的用途...
猜你喜欢
  • 2022-11-13
  • 1970-01-01
  • 1970-01-01
  • 2016-04-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多