【问题标题】:Regex help needed for splitting CSV file拆分 CSV 文件所需的正则表达式帮助
【发布时间】:2013-12-07 19:12:51
【问题描述】:

我有一段代码需要用逗号分隔,但不能在引号内用逗号分隔。我也不能在 python 中使用 csv 模块。使用我拥有的正则表达式模式,它适用于所有内容,除非引号前有多个逗号字段,例如我从数据中摘录的那些。我应该如何操作正则表达式的模式或者我应该添加什么?谢谢

CSV 文件:

,,,,,,,,
Grand Total for ATHLET:,,,"1,312 ",,62:58:18,130.62 ,,
,,,,,,,,
Grand Total for SELF:,,,"6,589 ",,397:57:58,708.53 ,,
,,,,,,,,

DataL 节选:

[Grand Total for ATHLET:,,,"1,312 ",,62:58:18,130.62 ,,]
[Grand Total for SELF:,,,"6,589 ",,397:57:58,708.53 ,,]

我目前拥有的正则表达式代码:

Pattern = re.compile(r'''((?:[^,"']|"[^"]*"|'[^,]*'|'[^']*')+)''')
dataL[i] = Pattern.split(dataL[i])[1::2]

当前输出:

['Grand Total for ATHLET:', '"1,312 "', '62:58:18', '130.62', '']
['Grand Total for SELF:', '"6,589 "', '397:57:58', '708.53', '']

想要的输出:

['Grand Total for ATHLET:', '', '', '"1,312 "', '62:58:18', '130.62', '']
['Grand Total for SELF:', '', '', '"6,589 "', '397:57:58', '708.53', '']

【问题讨论】:

  • 请贴出实际csv文件的内容。
  • 我发布了 CSV 文件,但这就是 dataL 的全部内容。我只是整理了重要的行并列了一个清单。
  • 等等,所以你想保留 "1, 312 " 周围的引号?这些几乎肯定不会提供信息,它们只是为了保护逗号。
  • 使用带有"作为引号字符和,作为分隔符的内置CSV模块不起作用?
  • @ixe013 我不能在这个程序中使用 CSV 模块。

标签: python regex csv


【解决方案1】:
import re
DataL = [ 
        '''Grand Total for ATHLET:,,,"1,312 ",,62:58:18,130.62 ,,''',
        '''Grand Total for SELF:,,,"6,589 ",,397:57:58,708.53 ,,'''
    ]   
Pattern = re.compile(r''',(?=[^"']*(?:(?:[^'"]*["'][^"']*){2})*$)''')
for (i, d) in enumerate(DataL):
    print Pattern.split(d)

生产:

['Grand Total for ATHLET:', '', '', '"1,312 "', '', '62:58:18', '130.62 ', '', '']
['Grand Total for SELF:', '', '', '"6,589 "', '', '397:57:58', '708.53 ', '', '']

【讨论】:

  • 我测试了那个正则表达式,但它不起作用。当它拆分数据时,不会将任何内容放回列表中。
  • 你能用你从文件中得到的行试试这个吗?或者也许修复上面 DataL 的摘录? Grand Total for ATHLET 部分没有被引用,是字符串吗?
  • 未引用运动员的总计。唯一一次在数据中引用某些内容是当字段中包含逗号时。
  • 但是[Grand Total for ATHLET:,,,"1,312 ",,62:58:18,130.62 ,,] 是什么?它是 Python 类型吗?列表?
  • 那是dataL[0]。 dataL 是我将所有行放入的列表。然后,我将每个索引拆分为一个列表,以制作一个 2D 列表。
猜你喜欢
  • 2023-02-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-11-30
  • 2023-03-19
  • 1970-01-01
  • 2013-08-11
  • 1970-01-01
相关资源
最近更新 更多