繁体   English   中英

如何用“||”替换第一个和最后一个“,”分隔符来自 csv 而其他人保持原样?

[英]How to replace the first and the last ',' delimiter with '||' from a csv while leaving the others as it is?

我有一个 CSV 文件:

101, "Name1", "Designation1", "blah1", "Blah1", 20200914001
102, "Name2", "Designation2", "blah2", "Blah2", 20200914002
103, "Name3", "Designation3", "blah3", "Blah3", 20200914003
104, "Name4", "Designation4", "blah4", "Blah4", 20200914004
105, "Name5", "Designation5", "blah5", "Blah5", 20200914005

替换每一行,如下所示:

101|| "Name1", "Designation1", "blah1", "Blah1"|| 20200914001

类似的结构也适用于其余的行/记录。

我的代码替换了所有分隔符。

data = ""
with open('firstCSV.csv', 'r') as file:
    data = file.read().replace(',', '||').replace(' ', '')

with open("first_Out.csv", "w") as out_file:
    out_file.write(data)

提前致谢。

^([^,]*),|,(?=[^,]*$)

替换为\\1|| . 证明

解释

--------------------------------------------------------------------------------
  ^                        the beginning of the string
--------------------------------------------------------------------------------
  (                        group and capture to \1:
--------------------------------------------------------------------------------
    [^,]*                    any character except: ',' (0 or more
                             times (matching the most amount
                             possible))
--------------------------------------------------------------------------------
  )                        end of \1
--------------------------------------------------------------------------------
  ,                        ','
--------------------------------------------------------------------------------
 |                        OR
--------------------------------------------------------------------------------
  ,                        ','
--------------------------------------------------------------------------------
  (?=                      look ahead to see if there is:
--------------------------------------------------------------------------------
    [^,]*                    any character except: ',' (0 or more
                             times (matching the most amount
                             possible))
--------------------------------------------------------------------------------
    $                        before an optional \n, and the end of
                             the string
--------------------------------------------------------------------------------
  )                        end of look-ahead

蟒蛇代码

import re

regex = r'^([^,]*),|,(?=[^,]*$)'
test_str = r'101, "Name1", "Designation1", "blah1", "Blah1", 20200914001'
subst = r'\1||'
print(re.sub(regex, subst, test_str))

结果: 101|| "Name1", "Designation1", "blah1", "Blah1"|| 20200914001 101|| "Name1", "Designation1", "blah1", "Blah1"|| 20200914001 101|| "Name1", "Designation1", "blah1", "Blah1"|| 20200914001

您可以拆分第一个(从左边开始maxsplit=1 )和最后一个(从右边开始maxsplit=1 )逗号并加入结果,例如:

>>> line = '101, "Name1", "Designation1", "blah1", "Blah1", 20200914001'

>>> first, rest = line.split(',', maxsplit=1)
>>> rest, last = rest.rsplit(',', maxsplit=1)
>>> '||'.join((first, rest, last))
'101|| "Name1", "Designation1", "blah1", "Blah1"|| 20200914001'

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM